标题:求助: 基于范围的 for 循环
只看楼主
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:399
专家分:190
注 册:2021-4-9
结帖率:97.22%
已结贴  问题点数:20 回复次数:4 
求助: 基于范围的 for 循环
程序代码:
#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已跳过 ==========
搜索更多相关主题的帖子: std cout test for int 
2022-07-08 12:28
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:10 

直接过
2022-07-08 14:38
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
我用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还差点儿
2022-07-08 14:49
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:399
专家分:190
注 册:2021-4-9
得分:0 
回复 2楼 apull
见鬼了,没找到原因。
又没问题了。。。


这是什么原因呀!!!

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

2022-07-08 18:01
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:399
专家分:190
注 册:2021-4-9
得分:0 
回复 3楼 rjsp
对了,就是这个问题。。。。
终于找到原因了。。。
2022-07-08 21:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-509518-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.205637 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved