非内置类型按const值返回函数的用例是什么?

问题描述

| 最近我读到,当从函数按值返回以使返回类型const限定非内置类型时是有意义的,例如:
const Result operation() {
    //..do something..
    return Result(..);
}
我正在努力了解这样做的好处,一旦确定要返回对象,调用者就可以决定返回的对象是否应为const?     

解决方法

        基本上,这里有一个轻微的语言问题。
std::string func() {
    return \"hai\";
}

func().push_back(\'c\'); // Perfectly valid,yet non-sensical
返回const rvalue是为了防止这种行为。但是,实际上,这样做弊大于利,因为既然右值引用在这里,您将只是防止移动语义,这很烂,并且明智地使用rvalue和左值
*this
重载。另外,您无论如何都要白痴。     ,        偶尔有用。请参阅以下示例:
class I
{
public:
    I(int i)                   : value(i) {}
    void set(int i)            { value = i; }
    I operator+(const I& rhs)  { return I(value + rhs.value); }
    I& operator=(const I& rhs) { value = rhs.value; return *this; }

private:
    int value;
};

int main()
{
    I a(2),b(3);
    (a + b) = 2; // ???
    return 0;
}
注意,由“ 4”返回的值通常被认为是临时的。但是它显然正在被修改。这不是完全想要的。 如果将the4ѭ的返回类型声明为
const I
,则将无法编译。     ,        按值返回时没有任何好处。这没有道理。 唯一的区别是,它阻止人们将其用作左值:
class Foo
{
    void bar();
};

const Foo foo();

int main()
{
    foo().bar(); // Invalid
}
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...