gpt4 book ai didi

c++ - 更改基本类型和类类型的返回值

转载 作者:可可西里 更新时间:2023-11-01 15:10:56 24 4
gpt4 key购买 nike

有这样的代码:

#include <iostream>
#include <string>

int returnnumber() { return 2; }
std::string returntext() { return "siema"; }

int main() {

std::cout << (returntext() += "cze") << std::endl; // siemacze
//std::cout << (returnnumber() += 2) << std::endl; error: lvalue required as left operand of assignment

return 0;
}

为什么可以改变 std::string 的返回值,而不是 int?

最佳答案

因为 std::string 是一个类类型,具有定义的 += 运算符作为成员函数。

标准允许您调用右值的成员函数。

一个愚蠢的结果是

struct S { int x; };
S foo() { return S(); }

int main()
{
foo() = S(); // OK, uses member assignment operator.
foo().x = 666; // !Nah, can't assign to rvalue of built-in type.
}

编译结果:

Comeau C/C++ 4.3.10.1 (Oct  6 2008 11:28:09) for ONLINE_EVALUATION_BETA2Copyright 1988-2008 Comeau Computing.  All rights reserved.MODE:strict errors C++ C++0x_extensions"ComeauTest.c", line 7: error: expression must be a modifiable lvalue      foo().x = 666;  // !Nah, can't assign to rvalue of built-in type.      ^1 error detected in the compilation of "ComeauTest.c".

但是,编译器在应用这条微妙规则的严格程度方面存在差异(或曾经存在差异),或者如果有的话。

干杯,

关于c++ - 更改基本类型和类类型的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7861188/

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