class A {};
A* a = NULL;
bool b1 = a && true; // OKbool b2 = true && a; // '&&' - illegal operation use
Как временное решение, используйте оператор '!' (logical not)
class A {};
A* a = NULL;
bool b1 = !!a && true;
bool b2 = true && !!a;
Мы подумаем на решением (можно ли менять поведение сейчас, когда существует большое количество кодов ?) Возможно, что для указателя, операция приведения к bool, будет операцией над указателем, а не объектом на который он указывает.
В этом случае, для выполнения операции над объектом необходимо будет записать код так
class A {};
A* a = NULL;
bool b1 = *a && true;
bool b2 = true && *a;
Операторы приведения, тоже хотим добавить, но эта задача (очень) неприоритетная
Баг с указателем
А какая с этим разница?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2018.09.17 14:17
Это баг?А какая с этим разница?
У меня очень плохая память. Некоторые "велосипеды" изобретаю по несколько раз.
то ли как
то ли как
Думаю что такая ошибка неспроста, потому что (если было бы свободное неявное приведение указателя к bool) не ясно как интерпретировать
Да, в Вашем случае неоднозначность. По-хорошему, на такое должно быть, как минимум, предупреждение компилятора.
В моем же гораздо более простом случае все четко. Думаю, и C++ с этим согласен.
fxsaber:
Это баг?
Как временное решение, используйте оператор '!' (logical not)
Мы подумаем на решением (можно ли менять поведение сейчас, когда существует большое количество кодов ?)
Возможно, что для указателя, операция приведения к bool, будет операцией над указателем, а не объектом на который он указывает.
В этом случае, для выполнения операции над объектом необходимо будет записать код так
Операторы приведения, тоже хотим добавить, но эта задача (очень) неприоритетная
Как временное решение, используйте оператор '!' (logical not)
Двойное отрицание компилятор оптимизирует?
А были серьезные причины отказаться от оператора ->?
Нет, серьёзных причин не было.
Единственное оправдание его отсутствия - это забота о неокрепших умах пользователей, не знакомых с C++.
Двойное отрицание компилятор оптимизирует?
Да, оптимизирует
Нет, серьёзных причин не было.
Единственное оправдание его отсутствия - это забота о неокрепших умах пользователей, не знакомых с C++.
Думаю, что ничего страшного не случится, если вы его добавите.
На какое-то время можно будет разрешить использовать точку с указателями, там где нет неоднозначности.
И конечно выдавать предупреждение.