gpt4 book ai didi

c++ - "int& foo()"在 C++ 中是什么意思?

转载 作者:IT老高 更新时间:2023-10-28 11:52:03 28 4
gpt4 key购买 nike

阅读时this explanation在左值和右值上,这些代码行让我印象深刻:

int& foo();
foo() = 42; // OK, foo() is an lvalue

我在 g++ 中尝试过,但编译器显示“未定义对 foo() 的引用”。如果我添加

int foo()
{
return 2;
}

int main()
{
int& foo();
foo() = 42;
}

它编译得很好,但运行它会给出 segmentation fault .就一行

int& foo();

单独编译和运行都没有任何问题。

这段代码是什么意思?如何为函数调用赋值,为什么它不是右值?

最佳答案

解释是假设 foo 有一些合理的实现,它返回对有效 int 的左值引用。

这样的实现可能是:

int a = 2; //global variable, lives until program termination

int& foo() {
return a;
}

现在,由于 foo 返回一个左值引用,我们可以为返回值赋值,如下所示:

foo() = 42;

这将使用值 42 更新全局 a,我们可以通过直接访问变量或再次调用 foo 来检查:

int main() {
foo() = 42;
std::cout << a; //prints 42
std::cout << foo(); //also prints 42
}

关于c++ - "int& foo()"在 C++ 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36477542/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com