@EugenePavlov

Что такое экземпляр void?

Здравствуйте. Увидел такую вещь:
#ifdef NDEBUG
#define LOGGER() (true) ? void() : Logger()
#else
#define LOGGER() Logger()
#endif


А также вот это:
void foo(void)
{
    return void(); // ?!?!
}


Что это? Зачем это? Как это работает?
  • Вопрос задан
  • 156 просмотров
Решения вопроса 1
@majstar_Zubr
C++ & gamedev
#include <iostream>
using namespace std;

int main() {
	cout << int() << endl;
	cout << double(78) << endl;
	
	cout << bool(-1) << endl;
	
	// void r = void();
	// error: void value not ignored as it ought to be
	
	void();
	void(42);
	return 0;
}


Вывод:
0
78
1

Это синтаксический сахар, который можно понимать, как конструктор встроенного типа, но фактически это работает, как приведение к типу

(int)0, (double)76, (bool)-1 соответственно

и вызова конструктора не происходит.

Т.е. при компиляции вместо void() произойдет (void)0, результатом будет void. Функция foo возвращает void, потому что это "обратная совместимость" с языком C.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы