注册 登录
编程论坛 C语言论坛

求助: 基于范围的 for 循环

追梦人zmrghy 发布于 2022-07-08 12:28, 1456 次点击
程序代码:
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v = { 0, 1, 2, 3, 4, 5 };

    for (const int& i : v) // 以 const 引用访问
        std::cout << i << ' ';
    std::cout << '\n';

    for (auto i : v) // 以值访问,i 的类型是 int
        std::cout << i << ' ';
    std::cout << '\n';

    for (auto&& i : v) // 以转发引用访问,i 的类型是 int&
        std::cout << i << ' ';
    std::cout << '\n';

    const auto& cv = v;

    for (auto&& i : cv) // 以转发引用访问,i 的类型是 const int&
        std::cout << i << ' ';
    std::cout << '\n';

    for (int n : {0, 1, 2, 3, 4, 5}) // 初始化器可以是花括号初始化器列表
        std::cout << n << ' ';
    std::cout << '\n';

    int a[] = { 0, 1, 2, 3, 4, 5 };
    for (int n : a) // 初始化器可以是数组
        std::cout << n << ' ';
    std::cout << '\n';

    for ([[maybe_unused]] int n : a)
        std::cout << 1 << ' '; // 不必使用循环变量
    std::cout << '\n';

    for (auto n = v.size(); auto i : v) // 初始化语句(C++20)
        std::cout << --n + i << ' ';
    std::cout << '\n';

    for (typedef decltype(v)::value_type elem_t; elem_t i : v)
        // typedef 声明作为初始化语句(C++20)
        std::cout << i << ' ';
    std::cout << '\n';

    //for (using elem_t = decltype(v)::value_type; elem_t i : v)
   
//    // 别名声明作为初始化语句,同上(C++23)
   
//    std::cout << i << ' ';
   
//std::cout << '\n';
}


只有本站会员才能查看附件,请 登录


已启动重新生成...
1>------ 已启动全部重新生成: 项目: test, 配置: Debug x64 ------
1>main.cpp
1>C:\Users\Administrator\source\repos\test\test\main.cpp(35,11): warning C5051: 特性“maybe_unused”至少需要“/std:c++17”;已忽略
1>C:\Users\Administrator\source\repos\test\test\main.cpp(39,10): error C7585: 具有初始值设定项的 for 语句(基于范围)至少需要 "/std:c++20"
1>C:\Users\Administrator\source\repos\test\test\main.cpp(43,10): error C7585: 具有初始值设定项的 for 语句(基于范围)至少需要 "/std:c++20"
1>已完成生成项目“test.vcxproj”的操作 - 失败。
========== “全部重新生成”: 0 成功,1 失败,0已跳过 ==========
4 回复
#2
apull2022-07-08 14:38
只有本站会员才能查看附件,请 登录

直接过
#3
rjsp2022-07-08 14:49
我用VC2022,也设成 /std:c++20,没有任何警告和错误。
你喜欢截图,却又不肯截全。图上你设置的是 Debug Win32 下的编译参数,但我怀疑你编译运行的并不是 Win32.

    //for (using elem_t = decltype(v)::value_type; elem_t i : v)
    //    // 别名声明作为初始化语句,同上(C++23)
    //    std::cout << i << ' ';
    //std::cout << '\n';
我将VC2022设置成 /std:c++23 也不行;gcc可以,看来vc还差点儿
#4
追梦人zmrghy2022-07-08 18:01
回复 2楼 apull
见鬼了,没找到原因。
又没问题了。。。
只有本站会员才能查看附件,请 登录


这是什么原因呀!!!

[此贴子已经被作者于2022-7-8 18:02编辑过]

#5
追梦人zmrghy2022-07-08 21:38
回复 3楼 rjsp
对了,就是这个问题。。。。
终于找到原因了。。。
1