将实例转换为无效?

Cast instance to void?

这个问题可能没有什么实际价值,但我只是想了解这里发生了什么。我有一个 class:

#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();
}

无论拼写如何,"cast to void" 都是一个 废弃值表达式 。不构成转换,因此不考虑转换函数。

C++允许你做很多没有意义的事情; 禁止一些特殊情况比只保留一般规则更难。