【发布时间】:2015-02-26 23:48:49
【问题描述】:
通常,我会省略std::vector,但这需要我让我的函数采用const int&。我想知道的是,如果我有一个悬空的参考,那么会有一个临时向量。修改其元素是否安全?
#include <iostream>
#include <vector>
void foo(int& i)
{
i = 42;
}
void foo(int&& i)
{
std::cout << "int&&";
}
int main()
{
for (auto&& i : std::vector<int>{1, 2, 3})
{
foo(std::forward<decltype(i)>(i));
}
}
【问题讨论】:
-
1) 您的代码没有悬空引用。 2) 如果您确实有一个悬空引用,那么就不能修改它引用的值。
-
“通常情况下,我会省略 std::vector,但这需要我让我的函数采用 const int&。” 嗯?
-
@LightnessRacesinOrbit 如果他丢弃了
std::vector<int>部分,那么推导出的initializer_list<int>将只允许const访问其元素。 -
@Praetorian:哦,对了,他当时是在说词汇。