这个问题可能具有很小的实用价值,但我只是想了解这里发生了什么。我有一节课:
#include <iostream>
struct Foo{
operator void () {
std::cout << " to void called " << std::endl;
return;
}
};
实际上我不确定是否可以将类型转换为void
(但仍然不确定它是否有意义),但在阅读this question之后我了解到它至少是可能的通过static_cast
。
现在我的问题是......
void foo() {
Foo f;
//return f; // A // not allowed
return static_cast<void>(f); // B // OK
return (void) f; // C // OK
}
int main() {
foo();
}
void
替换为int
,那么显然会有效)void
替换为int
,则所有三个版本都会调用我的operator int
。void
投射的方式,但是为什么我可以在没有按照我预期使用的情况下定义operator void
?答案 0 :(得分:4)
&#34;转换为void&#34;但是拼写是丢弃的值表达式。它不构成转换,因此不考虑转换函数。
C ++允许你做很多没有意义的事情;一些特殊情况禁止比仅仅保留一般规则更难。