c++ - 非常量引用的初始化

标签 c++ reference initialization

我想我从 TC++PL 中学到了 “非常量引用应由左值初始化”。

下面是我的问题

int f1(int &x)
{
    return 1;
}

int f2()
{
    return 1;
}

int f3(string &s)
{
    return 1;
}

string f4()
{
    return "1";
}

int main()
{
    cout<<f1(f2())<<endl; // Error.
    cout<<f3(f4())<<endl; // OK.
}

所以我无法理解为什么 f3(f4()) 是正确的,而 f4() 的返回值显然不是左值。

最佳答案

我认为,您使用的是 Microsoft Visual C++ 编译器,它使用默认选项编译此代码。这是因为其中有非标准扩展,允许将右值绑定(bind)到左值引用。 有关这如何在 MSVC 中工作的更多信息,您可以阅读 rvalue to lvalue conversion Visual Studio

关于c++ - 非常量引用的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16190252/

相关文章:

C++ 运算符 % 保证

vb.net - 函数不会在所有代码路径上返回值。使用结果时,可能会在运行时发生空引用异常

ios - 寻址 init 中闭包内创建的实例

rust - 一生可能活得不够长

c++ - 如何初始化对类内部变量的静态引用,以用于嵌套类

multidimensional-array - Julia:制作自定义类型的空/初始化多维数组

c++ - DLL 内存管理器混淆

包含解释为注释的 URL 的 C++ 类对象宏

c++ - C++ 中的静态类

c++ - 取消引用返回的引用