传递常量引用...它是否像最重要的const一样工作?

时间:2015-07-14 12:24:13

标签: c++ function reference const

这是一个已知的特殊情况,如果将常量引用分配为常量引用,则返回值不会丢失:

int MyFunction()
{
    int x = 5;
    return x;
}

int main()
{
    const int& y = MyFunction();
    std::cout << "This is valid: " << std::endl;
    return 0;
}

现在,如果我有两个函数,如下所示:

int MyFunction()
{
    int x = 5;
    return x;
}
void MyOtherFunction(const int& val)
{
    std::cout << val << std::endl;
}

int main()
{
     MyOtherFunction(MyFunction());   
}

根据标准,这是否有效?传递const引用有什么限制?

3 个答案:

答案 0 :(得分:3)

  

[C++14: 12.2/5]: [..] 函数调用(5.2.2)中与引用参数的临时绑定一直持续到完整表达式包含电话。 [..]

答案 1 :(得分:1)

那也没关系:标准要求匿名临时(MyFunction())可以绑定到const引用。

(它不能绑定到非const引用;有些编译器会失效)。

答案 2 :(得分:-1)

它有效。 。 引用只是变量的别名,它表示变量存储的地址位置。

const引用意味着你不能在你的函数中修改你的const争论。

在你的情况下, MyOtherFunction(MyFunction的());

这里MyFunctions返回一个int,它存储为匿名变量,其生命周期达到该表达式。