【发布时间】:2011-08-13 19:14:45
【问题描述】:
假设我有一个标准化函数定义为:
Vec3f Vec3f::getNormalized() const {
return (*this)/this->length();
}
如果使用此函数而没有存储它的返回值,是否有可能以某种方式创建编译时错误? ;
v.getNormalized(); // which most definitely is a typo
..而不是..
v = v.getNormalized();
【问题讨论】:
-
如果方法被声明为
const并且没有存储返回值,我认为这个问题会被优化掉,所以你不必担心。但无论如何,这是个好问题。 -
从优化的角度来看,我认为这不是问题,不管函数是否声明为 const。
-
可以吗,如果你可以在运行时检查它?
-
我不知道这是否只是为了举例,但如果不是,你能避免“v = v.blah()”或“v = blah(v)”,如果可能的话使用计算的每个阶段都有不同的变量,即使没有编译器检查,当您遗漏分配时也会让您更加明显? “Vec3f v_init = foo(); v_norm = v.GetNormalised(); Vec3f v_ans = v_norm * v_other; 等等;”
-
或者,不是你真正想要的,而是使用二元函数或运算符,所以“v.assignNormalisedTo(v)”。
标签: c++ compiler-errors return-value