gpt4 book ai didi

c++ - 具有现有变量的基于范围的 for 循环

转载 作者:IT老高 更新时间:2023-10-28 22:02:17 26 4
gpt4 key购买 nike

在 C++11 中使用基于范围的 for 循环和现有变量,我希望该变量在循环后用最后一次迭代的值填充。但是,当我测试它时,我得到了不同的结果。

例子:

#include <iostream>
#include <vector>
using namespace std;

int main() {
std::vector<int> v;
v.push_back(2);
v.push_back(43);
v.push_back(99);

int last = -50;
for (last : v)
std::cout << ":" << last << "\n";

std::cout << last;
return 0;
}
  1. MSVC 2013 似乎不支持没有类型声明的基于范围的 for 循环
  2. GCC-5.1 要么自动引入一个新变量,要么将其设置回初始值,给出

    :2
    :43
    :99
    -50

我猜 MSVC 只是再次成为 MSVC,但是这里的 GCC 呢?为什么最后一行是last而不是99


鉴于 definition by the standard ,我会期待我在第一句话中描述的行为。

{
auto && __range = range_expression ;
for (auto __begin = begin_expr, __end = end_expr;
__begin != __end; ++__begin) {
range_declaration = *__begin;
loop_statement
}
}

range_declarationlast 而不是 int last,这应该修改现有变量。

最佳答案

GCC 实现标准提案 n3994 ,这表明 for (elem : range)for (auto&& elem : range) 的语法糖。这并没有进入 C++17,因此该功能已从更新的 GCC 版本中删除。

用于迭代范围的命名变量必须是根据 [stmt.ranged] 的声明,因此您的代码不应编译。

关于c++ - 具有现有变量的基于范围的 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38614622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com