【发布时间】:2017-04-10 13:11:28
【问题描述】:
这个问题可能没有什么实际价值,但我只是想了解这里发生了什么。我有一堂课:
#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();
}
- 为什么不允许 A? (如果我将
void替换为int显然会起作用) - 为什么 B 和 C 都不调用我的转换运算符? (同样,如果我将
void替换为int,所有三个版本都会调用我的operator int)。 - 我可以接受这是转换为
void的工作方式,但是当operator void未按预期使用时,为什么允许我定义它?
【问题讨论】: