如何更改operator =的返回值?

时间:2012-06-12 23:00:38

标签: c++

所以我一直在创建这个“框架”的东西,基本上把源代码放在一起(用于着色器)。当我提出创建一个语句类并重载所有操作符(完全改变它们的含义)以自然形式形成其他语句时,我认为我非常聪明。它看起来像这样:

class Statement {

public:
    Statement operator=(const Statement &other) const;
    Statement operator+(const Statement &other) const;
    ...

}

然而,当我认为我已经完成时,结果是操作符=完全忽略了返回值,而只是总是在'='之前返回对象。我是否理解正确无法完成此任务?

编辑:好的,对不起,我提供的示例编译(我的操作符也在A中重载,但也无效)。

编辑2:operator =实际上是const的目的:其意图是创建一个新的赋值语句对象。

示例:

Block b; // Represents a sequence of commands.
Statement var1, var2; // Represent some variables.
...
b.append(var1 = var2);

预期:b包含命令var1 = var2;

观察:b包括var1;

已解决:问题是因为我使用的是派生类而不是使用其默认运算符=的Statement。谢谢大家。

2 个答案:

答案 0 :(得分:4)

除非你声明一个,否则一个类总是有一个带有签名的隐式声明的复制赋值运算符:

Statement& operator=(const Statement&)

注意它是不是 const,因此在分配给非const对象时是首选,因为赋值运算符是const。 [编辑:我的错误,const赋值运算符会抑制隐式赋值运算符,因此应使用非常规const - 限定赋值运算符。]

(您希望如何分配给I.e. modify,一个const对象?)

(更准确地说,如果子对象声明具有该签名的赋值运算符,则隐式声明的赋值运算符可以具有签名Statement& operator=(Signature&),但在您的示例中并非如此。)

答案 1 :(得分:1)

您的代码很好(适用于g++-4.5.1g++-4.3.4,Clang和VS2010)。如果它不起作用,那么编译器必定有问题,或者必须有一些你没有告诉我们的东西。