对于
的以下定义const vector3F operator*(const vector3F &v, float s);
有两个const
,它们各自的用法是什么?
答案 0 :(得分:4)
参数中的const-reference意味着您不会更改v
,因此您可以将常量向量(和临时值!)传递给函数。那是件好事。
恒定的按值返回是一种噱头。它阻止你写这样的东西:
vector3F v = get_vector();
vector3F w = v;
(v * 1.5) = w; // outch! Cannot assign to constant, though, so we're good.
将by-value作为常量返回是有问题的,因为它会干扰C ++ 11的右值引用并移动语义:
move_me(v * 1.5); // cannot bind to `vector3F &&` :-(
正因为如此,并且因为像我上面所展示的那样的滥用是不太可能偶然发生的,所以最好只按价值返回非常数。
答案 1 :(得分:0)
第一个const表示返回值是常量且不能更改(顺便说一句,这对于乘法运算符来说是一个坏主意):
const Vector3F v = myvector*100.0;
v.x = 0; // error: the vector is constant and can not be altered
第二个const表示参数“v”是常数:
const vector3F operator*(const vector3F &v, float s)
{
v.x = 0; // error: "v" is constant
}