转换操作符问题
Conversion operator issues
我今天早些时候偶然发现了这个"问题"。
我有这个类,它包含一个转换操作符。比如:
class myClass {
public:
...
operator anotherClass*() { return anotherClassPtr; }
...
}
现在这一切都运行良好…直到我犯了这个愚蠢的错误:
void yetAnotherClass::foo(myClass* _p_class)
{
...
anotherClass* lp_anotherClass = (anotherClass*)_p_class;
...
}
我花了很长时间才弄清楚为什么lp_AnotherClass ptr被设置为非零,而我确信_p_class中的anotherClassPtr为0。
有什么我可以添加到myClass,以防止我犯这个错误吗?(即编译器会吐出一些错误)是否有可能防止对象ptr被强制转换为其他东西?
anotherClass* lp_anotherClass = (anotherClass*)_p_class;
首先,不应该使用c风格的强制转换。使用c++风格的强制转换。这将节省您的时间,因为编译器会立即告诉您问题:
auto* lp_anotherClass = static_cast<anotherClass*>(_p_class); //ERROR
其次,首选explicit
转换函数:
explicit operator anotherClass*() { return anotherClassPtr; }
为什么我推荐explicit
转换函数,因为它避免了由隐式转换引起的微妙bug,另外,它增加了代码的可读性!
注意explicit
转换函数是c++ 11的特性
相关文章:
- 在使用放置新操作符时,我真的需要担心对齐问题吗
- Assert()函数抛出一个错误——操作符有问题
- 操作符+重载问题
- 下标操作符重载:返回引用问题
- 操作符重载问题
- 操作符重载问题
- 关于操作符new()和操作符delete()的问题
- c++操作符重载性能问题
- c++中切换操作符的问题
- 操作符重载问题
- 涉及数组指针时delete[]操作符的问题
- 编译问题相等/不相等操作符
- 操作符过载问题
- 矩阵类操作符重载,析构函数问题
- 类赋值操作符=问题
- c++ boost::线程操作符()()问题
- 关于()操作符重载的问题
- 关于模板中随机访问迭代器的操作符+重载的问题
- 三元操作符的指针转换问题
- 基类中操作符重载的问题