Я знаю, что у тройного оператора есть некоторые удивительные ограничения, но я был немного озадачен тем, что это не скомпилируется для меня:
void foo(bool b)
{
int* ptr = ((b) ? NULL : NULL);
}
Очевидно, что минимум должен был показать проблему. Ошибка:
[BCC32 Error] Unit11.cpp(20): E2034 Cannot convert 'int' to 'int *'
Компилятор - это менее 100% -конформирующий Embarcadero С++ Builder 2010, поэтому ошибка компилятора далека от невозможности...
ПРИМЕЧАНИЕ. Изменены Parens, чтобы избежать путаницы в моих намерениях.
ПРИМЕЧАНИЕ2: Я немного смутился о том, как я пришел к этой конструкции в первую очередь, так что здесь мое оправдание: я получал некоторые ошибки компиляции на строке типа a = b? c : d
, где b, c и d - все сложные выражения. Чтобы сузить его, я заменил c
и d
на NULL
, чтобы проверить, был ли b
виновником. На данный момент все попало в ад в ручную тележку.