相关疑难解决方法(0)

函数返回struct为LValue

在下面的代码片段中,为什么行o.margin() = m;编译没有错误?它很容易引起警告,因为它几乎总是一个错误.我实际上认为它是一个错误,因为它在赋值的左侧放置了一个R值.

#include <iostream>

struct Margin
{
    Margin(int val=0) : val(val) {};
    int val;
};

struct Option
{
    Margin m;
    int z=0;

    Margin margin()const { return m; }
    int zoomLevel() { return z; }
};


int main()
{
    Option o;
    std::cout << "Margin is: "<< o.margin().val << std::endl;

    Margin m = { 3 };

    // The following line is a no-op, which generates no warning:
    o.margin() = m;

    // The following line is an error
    // GCC …
Run Code Online (Sandbox Code Playgroud)

c++ gcc

24
推荐指数
2
解决办法
874
查看次数

标签 统计

c++ ×1

gcc ×1