为什么这段代码是格式良好的?我没有向函数传递引用:
void function(const int& ref) {
}
int main()
{
function(1);
}
void function(const int& ref) {
}
int main()
{
function(1);
}
常量左值引用可以绑定到右值。像您的文字“1”一样的右值没有持久的别名,因此如果您要修改它,您将无法观察到效果,但是如果您承诺不修改它(即通过常量引用访问它),仍然可以拥有完全合理的代码,这就是为什么允许此绑定的原因。
(您还可以将右值绑定到(可变)右值引用:void function(int &&)
在这种情况下,右值引用成为该值的(唯一)别名。)
还请注意,如果没有这个规则,从返回prvalues的函数初始化变量或根本不能使用复制初始化将是不可能的:
struct T { T(int); };
T f();
T x = 1; // === "T x = T(1);", copy constructor wants to bind to prvalue
T x = f(); // ditto
T x((f())); // ditto
int
和你的 int 没有任何关系。在这个例子中,T
值是 prvalue。 - Kerrek SB
const
关键字可以让你实现这样的功能。如果省略它,就会出错。 - πάντα ῥεῖ