将整数传递给要求引用的函数

时间:2014-10-16 21:11:12

标签: c++

为什么这段代码格式正确?我没有传递对函数的引用:

void function(const int& ref) {

}

int main()
{
    function(1);
}

2 个答案:

答案 0 :(得分:6)

常量左值引用可以绑定到右值。 Rvalues与您的文字1一样,不具有持久性别名,因此如果您要修改它,您将无法观察到效果,但如果您承诺不修改它(即通过不断引用访问它),你仍然可以拥有完全合理的代码,这就是允许这种绑定的原因。

(您还可以将rvalues绑定到(mutable) rvalue references void function(int &&)在这种情况下,rvalue引用将成为值的(唯一)别名。)

另请注意,如果没有此规则,则无法从返回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

答案 1 :(得分:2)

编译器可以从常量创建临时值,并允许临时值绑定到const引用。如果引用不是常量,则不允许这样做。