Актерский экземпляр void?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Актерский экземпляр void?

Сообщение Anonymous »

Этот вопрос, вероятно, имеет небольшую практическую ценность, но я просто пытаюсь понять, что здесь происходит. У меня есть класс: < /p>

Код: Выделить всё

#include 
struct Foo{
operator void () {
std::cout  (все же не уверен, что это имеет смысл), но после прочтения этого Вопрос я узнал, что это возможно, по крайней мере, через static_cast 
. < /p>

Теперь мой вопрос ... < /p>

Код: Выделить всё

void foo() {
Foo f;
//return f;                     // A // not allowed
return static_cast(f);    // B // OK
return (void) f;                // C // OK
}
int main() {
foo();
}
< /code>

[list]
[*] Почему не разрешено? (Если бы я заменил void 
на int , это, очевидно, сработало бы)
[*] Почему ни B, ни C не вызывают моего оператора конверсии? (Опять же, если бы я заменил void на int Все три версии позвонит моему оператору int ).
[*] Я мог бы признать, что это путь Casting to void работает, но тогда мне разрешено определить оператор void , когда он не используется, как я бы ожидал?
[/list]

Подробнее здесь: https://stackoverflow.com/questions/433 ... ce-to-void
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»