0
A
回答
4
参数中的常量引用意味着您不会更改v
,因此您可以将常量向量(和临时对象!)传递给该函数。这是好事。
恒定的按价值回报是一种噱头。这样就不会写这样的事情:
vector3F v = get_vector();
vector3F w = v;
(v * 1.5) = w; // outch! Cannot assign to constant, though, so we're good.
返回的值作为常量是有问题的,但是,因为它与C++ 11的右值引用的干扰和移动语义:
move_me(v * 1.5); // cannot bind to `vector3F &&` :-(
由于并且因为像我上面展示的那样的滥用是不太可能偶然发生的,所以最好只按非常数返回值。
0
第一常量表示该返回值是恒定的,并且不能被改变(它,顺便说一下,为乘法运算符未尝):
const Vector3F v = myvector*100.0;
v.x = 0; // error: the vector is constant and can not be altered
第二常量表示该参数“v”是常数:
const vector3F operator*(const vector3F &v, float s)
{
v.x = 0; // error: "v" is constant
}
+1
第一个示例中的错误来自'v'声明中的'const'。不要改变'operator *',整个事情就会编译得很好。 –
+0
是的,这是一个坏主意(请参阅Kerrek SB的答案),但不是因为这个原因。 – UncleBens
相关问题
- 1. 关于运算符重载
- 2. 重载已定义的运算符
- 3. 关于运算符重载在C++
- 4. 运算符重载 - 重载*
- 5. C++运算符在已重载的运算符中重载
- 6. 定义类型参数的定义运算符重载
- 7. 重载运算符*
- 8. 重载运算符%
- 9. 重载++运算符
- 10. 重载+ =运算符
- 11. 运算符重载?
- 12. 重载运算符[]
- 13. 重载运算符=
- 14. 重载=运算符
- 15. 运算符重载(=)
- 16. 运算符重载
- 17. 重载运算符+
- 18. 运算符重载+ =
- 19. +运算符重载在C++
- 20. 关于运算符重载决策
- 21. 关于C++运算符重载
- 22. C++运算符重载利用关联
- 23. 重载模板关系运算符
- 24. 运算符在类之外重载定义 - C++
- 25. 运算符重载“运算符T *()”产生比较运算符?
- 26. 定义[] =运算符
- 27. Python:运算符重载特定类型
- 28. 重新定义__and__运算符
- 29. OCaml重新定义中缀运算符
- 30. ostream运算符在重载的后缀增量/减量运算符上重载
不会返回const值也会阻止这种用法'somevar =(v * 1.5)* w;'? – RedX
@RedX:如果允许您从常量中复制,则不适用。 –