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
本身永远不会产生引用类型。
所以 n2
是 int
类型。
(如果我每次看到像 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&
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
本身永远不会产生引用类型。
所以 n2
是 int
类型。
(如果我每次看到像 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&