[英]c-style type cast and operator()
问题已更改!
我使用一种简单的方法从本地名称空间隐藏枚举-结构内部的枚举。 它大致是这样的:
struct Color
{
enum Type
{
Red, Green, Black
};
Type t_;
Color(Type t) : t_(t) {}
operator Type () const {return t_;}
private:
template<typename T>
operator T () const;
};
运算符T()是对隐式类型强制转换的保护。 然后,我尝试使用gcc和keil编译此代码:
Color n;
int a[9];
a[ (int)n ] = 1;
gcc编译它没有错误(这是我所期望的),但是Keil给了我一个错误:“无效的类型转换。操作符()不可访问”。
所以我的问题是:哪个编译器正确?
我知道c ++ 11枚举类,但现在Keil不支持
reinterpret_cast(不是c-style()强制转换)应该调用类型转换运算符吗?
否, reinterpret_cast
仅用于一些不可靠的转换类型:
您根本不需要强制转换即可使用隐式转换运算符-您根本没有阻止隐式转换。 在C ++ 11中,如果运算符是explicit
,则需要static_cast
。
如果您坚持使用C ++ 03,并且确实要防止隐式转换但允许显式转换,那么我认为唯一明智的做法是提供一个命名转换函数。
更新 :问题现在已经更改,正在询问有关C样式的强制转换,而不是reinterpret_cast
。 应该编译该代码,因为static_cast
可以完成的任何转换(包括隐式转换)也可以使用C样式转换进行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.