如何调用非常数运算符
How to call a non-const operator?
所以我在尝试调用特定运算符时遇到了问题。在某些课程中,我得到了:
template <class Object>
const Object& MyVector<Object>::operator[] (int index ) const {
if (index < 0 || index >= mSize)
throw MyException();
return mObjects[index];
}
我还得到了
template <class Object>
Object& MyVector<Object>::operator[]( int index ){
if (index < 0 || index >= mSize)
throw MyException();
return mObjects[index];
}
我想调用第二个,这样我就可以修改值,但编译器一直告诉我不能这样做,因为我正在试图修改一个常量。
以下是我尝试使用操作员功能的地方:
template <class Object>
const Object& Matrix<Object>::get(int r, int c) const{
MyObject *row = & MyVectorObject[r]; //error
//snipped
}
我一直收到错误:无法从const MyObject *
转换为MyObject *
若要调用对象的非常数成员函数(包括运算符),对象/引用必须是非常数。如果函数是通过指针调用的,那么它必须是指向非常数的指针。
在您的案例中,MyVectorObject
是const,因此调用了const重载。从您的代码中看不出来,为什么它是const,但在注释中您揭示了它是一个成员。成员是通过this
指针隐式访问的,在const成员函数内部,this
当然是指向const的指针。
Matrix<Object>::get()
方法是const,因此如果您在该方法中访问Matrix的类属性,则所有这些属性都将被视为const。
CCD_ 7将有效地调用CCD_。
CCD_ 9将返回一个CCD_。
因此MyVectorObject[r]
是const Object&
型,& MyVectorObject[r]
将是const Object *
型
你应该写:const MyObject *row = & MyVectorObject[r];
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 无法在 Visual Studio 2013 中运行非常基本的代码 - 运算符">>"错误/生成错误
- 当"|"非常好时,为什么要使用"+"运算符?
- 非常简单的C ++:在 fstream 中>>运算符在读取某些内容后是否删除换行符?
- std::istream 提取运算符(双精度或浮点数)在 VS 2012 中非常慢
- C++运算符<<和头文件中的>>方法,做得非常错误