在C++中,int && a; 的声明是合法的,但它创建了一个未初始化的右值引用 a。编译器通常允许这样的声明,但在使用 a 之前,您必须将其绑定到一个右值。
如果在使用 a 之前没有绑定到右值,可能会导致未定义的行为。当然,这种情况下编译器可能会产生警告,因为未初始化的引用是一个潜在的错误。
正确的做法是在声明时就将右值引用绑定到一个右值,或者确保在使用之前对其进行初始化。例如:
int value = 42;
int&& a = std::move(value); // 绑定到右值
或者:
int&& a = 5; // 直接绑定到右值
这样做可以避免未定义的行为。
但在C++中,int & & q; 是不合法的语法。C++中不存在”引用的引用”的概念,因此连续使用两个 & 会导致编译错误。
如果您想要使用引用,可以使用一层引用,如 int& q;,这表示 q 是一个对整数的引用。