我定义了一个这样的类:
Quaternion& conjugate(); //negates the vector component of the quaternion
Quaternion conjugate() const; //same but in without modifying the class...
Quaternion& operator = (Quaternion const& Qrhs);
Quaternion& operator *= (Quaternion const& Q);
Quaternion operator * (Quaternion const& Qrhs) const;现在我像这样使用这个函数:
PRINTVAR(*this); //this is the first time printed (a little macro to print line and file)
Quaternion vQ(0.,vn), resQ;
resQ = vQ*(this->conjugate()); //this is the method I want to discuss...
PRINTVAR(*this); //this is the second time
resQ = *this * resQ;这是输出
*this: (0:0:0:0) at line: 128 in file: Quaternions.cpp
*this: (-0:-0:-0:0) at line: 131 in file: Quaternions.cpp我想,通过调用resQ = vQ*(this should be called as const)...行中的操作符*,为什么我再次打印*this会发生变化?
下面是共轭函数的定义:
Quaternion& Quaternion::conjugate(){
/* Given: Nothing
* Task: Invert sign of the vector
* Return: the class which will be modified
*/
V3 vec;
vec = -(this->getVector());
x() = vec[0];
y() = vec[1];
z() = vec[2];
return *this;
}
Quaternion Quaternion::conjugate() const{
Quaternion result(*this);
result.conjugate();
return result;
}发布于 2012-01-21 01:48:15
如果您显示的代码在非常数方法中,那么this指针就是非常数,非常数conjugate方法当然比常量方法更匹配。在重载决策中不考虑返回类型。如果您想坚持使用const版本,可以添加constness:resQ = vQ*(static_cast<const Quaternion*>(this)->conjugate());
发布于 2012-01-21 01:50:22
您使用this的方法可能是非常量的。
A类型的成员函数的this类型为A * const。对于常量成员函数,它是const A * const。
因此,如果您将代码输入到const方法中,您的代码将按照您预期的那样工作。
如果你想强制调用const重载函数,你需要做一个const-cast:
const_cast<const Quaternion * const>(this)->conjugate();发布于 2012-01-21 01:51:49
*这不是const (尽管它在const方法中使用),以及关于const重载的c++ FAQ Lite状态(在常见问题解答的情况下,在下标运算符上);
将下标运算符应用于非常数MyFredList对象时,编译器将调用非常数下标运算符。
翻译,因为*这是非常量,非常量方法将被调用。
https://stackoverflow.com/questions/8945560
复制相似问题