所以我一直在创造这个“框架”的东西,基本上拼的源代码(着色器)。当我提出创建一个语句类并重载所有操作符(完全改变它们的含义)以自然地形成其他语句的想法时,我认为我非常聪明。它看起来像这样:如何更改operator =的返回值?
class Statement {
public:
Statement operator=(const Statement &other) const;
Statement operator+(const Statement &other) const;
...
}
然而,当我以为我做了,事实证明,运营商=完全忽略返回值,而是前的“=”只是始终返回的对象。我是否正确地理解,没有办法做到这一点?
编辑:好吧,对不起,示例我提供的编译(我有运营商以一种过于超载,没有工作)。
编辑2:运算符=实际上是有目的的:它的意图是创建一个新的赋值语句对象。
实施例:
Block b; // Represents a sequence of commands.
Statement var1, var2; // Represent some variables.
...
b.append(var1 = var2);
预期:B包括命令VAR1 = VAR2;
观察:1b包括VAR1;
已解决:问题是因为我使用派生类而不是使用其默认运算符=的Statement。感谢大家。
怎么办你的意思是“忽略返回值,而是总是在'=之前返回对象““?您能否添加一个完整的示例以及预期的和观察的输出? – Mankarse
@Mankarse完成。 – Detheroc
@Dethroc:你举的例子仍然缺少大量的代码(如何'声明::运算符='实现如何'Block'实现的?)。 [我尝试填充空格,它对我有用](http://ideone.com/5eSls)。 – Mankarse