【发布时间】:2013-12-04 14:15:23
【问题描述】:
让我们从这个 C++ 示例代码开始:
#include <vector>
#include <iostream>
int main()
{
std::vector<int> vec;
vec.push_back(0);
for (int i = 1; i < 5; i++)
{
const auto &x = vec.back();
std::cout << "Before: " << x << ", ";
vec.push_back(i);
std::cout << "After: " << x << std::endl;
}
return 0;
}
代码用g++ test.cc -std=c++11 -O0编译,结果如下:
Before: 0, After: 0
Before: 1, After: 0
Before: 2, After: 2
Before: 3, After: 3
我期待第二行输出是
Before: 1, After: 1
因为x 是对向量中的一个项目的引用,不能通过将项目附加到向量来修改它。
但是,我目前还没有阅读反汇编代码或进行任何其他调查。另外我不知道这是否是语言标准中未定义的行为。
我想解释一下。谢谢。
【问题讨论】:
标签: c++ c++11 vector reference