所以我一直在创建这个基本上将源代码(用于着色器)放在一起的“框架”。当我想出创建语句类并重载其所有运算符(完全改变它们的含义)以自然方式形成其他语句的想法时,我认为我非常聪明。它看起来像这样:
class Statement {
public:
Statement operator=(const Statement &other) const;
Statement operator+(const Statement &other) const;
...
}
然而,当我认为我已经完成时,结果发现 operator= 完全忽略了返回值,而是总是在“=”之前返回对象。我是否正确理解没有办法做到这一点?
编辑:好的,对不起,我提供的示例编译(我在 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;
已解决:问题是因为我使用的是派生类而不是使用其默认运算符 = 的语句。谢谢大家。