gpt4 book ai didi

C++:返回值是L值吗?

转载 作者:IT老高 更新时间:2023-10-28 12:09:24 25 4
gpt4 key购买 nike

考虑这段代码:

struct foo
{
int a;
};

foo q() { foo f; f.a =4; return f;}

int main()
{
foo i;
i.a = 5;
q() = i;
}

没有编译器提示它,即使是 Clang。为什么 q() = ... 行是正确的?

最佳答案

不,函数的返回值是左值当且仅当它是引用 (C++03)。 (5.2.2 [expr.call]/10)

如果返回的类型是基本类型,那么这将是一个编译错误。 (5.17 [expr.ass]/1)

这样做的原因是您可以在类类型的右值和 foo 的分配上调用成员函数(甚至是非const 成员函数) > 是实现定义的成员函数:foo& foo::operator=(const foo&)。第 5 节中对运算符的限制仅适用于内置运算符,(5 [expr]/3),如果重载决议为运算符选择重载函数调用,则该函数调用的限制适用而是。

这就是为什么有时建议将类类型的对象返回为 const 对象(例如 const foo q();),但这可能会产生负面影响在 C++0x 中,它可以阻止移动语义正常工作。

关于C++:返回值是L值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6111905/

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