如果您编写这样的模板
template <typename T>
using X = const T;
const T是什么意思?
要知道这一点,我编写了以下程序:
std::cout << std::boolalpha
<< std::is_same_v<X<int&>, int&> << '\n'
<< std::is_same_v<X<const int*>, const int* const> << '\n'
<< std::is_same_v<X<const int&>, const int&> << '\n';
令我惊讶的是,所有答案都是正确的。
为什么X
我用gcc 7.3.0和clang ++ 6.0编译了它。答案相同。
答案 0 :(得分:4)
引用const int是一回事。 const引用int是胡说八道。
根据C ++的规则,当您const限定引用时,什么也没发生。
如果您习惯使用const东部语言,这很有意义,如果您是使用const西部语言的用户,则没有什么意义。
int const&
是对const int的引用。
int&const
与
相同int&
答案 1 :(得分:1)
Cv限定的引用格式错误,除非通过使用typedef-name([dcl.typedef],[temp.param])或decltype-specifier({ {3}}),在这种情况下,cv限定词将被忽略。 [示例:
typedef int& A; const A aref = 3; // ill-formed; lvalue reference to non-const initialized with rvalue
aref
的类型是“对int
的左值引用”,而不是“对const int
的左值引用”。 — 结束示例]