C++11 标准是否通过 "auto n2 = const_cast<int&>(n);" 保证 "n2 is int&"?

Does the C++11 standard guarantee "n2 is int&" by "auto n2 = const_cast<int&>(n);"?

const int n = 0;
auto& n1 = const_cast<int&>(n);
auto n2 = const_cast<int&>(n);

C++11 标准是否通过 auto n2 = const_cast<int&>(n); 保证 n2 is int&

我必须使用 auto& n1 = const_cast<int&>(n); 而不是 auto n2 = const_cast<int&>(n); 吗?

根据 C++11 标准,这两种方式是否完全等同?

auto 本身永远不会产生引用类型。

所以 n2int 类型。

(如果我每次看到像 for (auto s : expensive_deep_copy_container) 这样的代码都能得到一美元)。

auto 使用与常规函数模板参数推导相同的规则,后者从不推导引用。

C++14 decltype(auto),另一方面,可以在这里推导出一个引用。以及 C++11 auto&&.

const int n = 0;
auto a = const_cast<int&>(n);           // a is int
decltype(auto) b = const_cast<int&>(n); // b is int&
auto&& c = const_cast<int&>(n);         // c is int&