Этот код на С++, возможно, неожиданно выводит 1
.
#include <iostream>
std::string x();
int main() {
std::cout << "x: " << x << std::endl;
return 0;
}
x
- это прототип функции, который, как представляется, рассматривается как указатель на функцию, и в разделе С++ Standard 4.12. Логические преобразования говорят:
4.12 Логические преобразования [conv.bool] 1 Значение арифметики, неперечисленное перечисление, указатель или указатель на тип члена может быть преобразуется в prvalue типа bool. Нулевое значение, значение нулевого указателя, или значение указателя нулевого элемента преобразуется в значение false; любое другое значение преобразован в true. Для прямой инициализации (8.5), prleue типа std:: nullptr_t может быть преобразован в prvalue типа bool; итоговое значение false.
Однако x
никогда не привязан к функции. Как и следовало ожидать, C-компоновщик не допускает этого. Однако в С++ это не проблема. Может ли кто-нибудь объяснить это поведение?