【发布时间】:2011-05-01 04:21:11
【问题描述】:
在玩user GMan 的this answer 时,我制作了以下sn-p(用Visual C++ 9 编译):
class Class {
public:
operator void() {}
};
Class object;
static_cast<void>( object );
(void)object;
object.operator void();
在使用调试器后,我发现转换为void 不会调用Class::operator void(),只有第三次调用(显式调用运算符)实际上调用了运算符,这两个强制转换什么都不做。
为什么operator void 不使用强制转换语法调用?
【问题讨论】:
-
我喜欢你总是问奇怪但有趣的问题;)这是我的 +1。
-
您希望在没有演员的情况下执行什么代码?实际上没有...为什么要改变这个?
-
@Eiko:如果那是
operator int()而我写了(int)object;,那么operator int()将被调用。原来operator void()不是这种情况,所以我问了这个问题。 -
对于它的价值,Comeau 给出了以下警告:“Class::operator void()”将不会被调用以进行隐式或显式转换”。
-
和 gcc 警告:
conversion to void will never use a type conversion operator
标签: c++ casting operators operator-overloading