我写了一个小的3D向量类。特别是,我编写了两个函数,一个用于旋转向量,另一个用于返回向量本身的旋转副本。所以我有一个追随者:

Vector Vector::Rotate(const double angle, Vector& axis) const {
Vector b=*this;
b.Rotate(angle,axis);
return (b);
}

void Vector::Rotate(const double angle, Vector & axis) {

/* let's promote this vector to a quaternion */
Quaternion V (0,*this);

/* quaternion describing the rotation */
Quaternion q (cos(angle/2),axis*sin(angle/2));

/* actual rotation  */
*this = (q*V*q.conjugate()).Vec();
}


现在,当我写这样的东西:

 vector2 = vector1.Rotate(rbo::M_PUCKER,i);


我收到错误:
    没有运算符“ =”匹配这些操作数
    操作数类型为:向量=无效

我希望编译器理解我想要的:为什么他选择空版本而不是另一个返回向量?此外,以我的方式编写更多相同功能的版本是一种好习惯吗?

最佳答案

编译器仅根据调用成员函数的对象来选择const或非const重载。如果对象(或引用)是const,它将选择const重载。

这是好习惯吗?不。从您对编译器应该做什么感到困惑的事实看来,这很明显。编写可轻松阅读和解释而不会引起混淆的代码通常是一种好习惯:)

关于c++ - 编译器如何选择正确的功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15344270/

10-09 05:36
查看更多