Ошибки, баги, вопросы - страница 2325

 
Ilyas:
А были серьезные причины отказаться от оператора ->?
 
TheXpert:
А были серьезные причины отказаться от оператора ->?

Нет, серьёзных причин не было.

Единственное оправдание его отсутствия - это забота о неокрепших умах пользователей, не знакомых с C++.

 
fxsaber:

Двойное отрицание компилятор оптимизирует?

Да, оптимизирует

 
Ilyas:

Нет, серьёзных причин не было.

Единственное оправдание его отсутствия - это забота о неокрепших умах пользователей, не знакомых с C++.

Думаю, что ничего страшного не случится, если вы его добавите.

На какое-то время можно будет разрешить использовать точку с указателями, там где нет неоднозначности.

И конечно выдавать предупреждение.


 
Как в маркете к продуктам добавить кнопку: "Скачать Триал"?
 
Koldun Zloy:

Думаю, что ничего страшного не случится, если вы его добавите.

На какое-то время можно будет разрешить использовать точку с указателями, там где нет неоднозначности.

И конечно выдавать предупреждение.

Зачем так усложнять? Вполне достаточно сделать . и -> равноценными, взаимозаменяемыми записями

Образно говоря

#define ->   .
 
fxsaber:

Да, в Вашем случае неоднозначность. По-хорошему, на такое должно быть, как минимум, предупреждение компилятора.

В моем же гораздо более простом случае все четко. Думаю, и C++ с этим согласен.

Так я и имел ввиду что в моем случае MQL подразумевает вариант (2) в то время как C++ подразумевает вариант (1). Т.е. у Вас мнимая чёткость - небольшое изменение (класса A) и смысл кардинально меняется
 
A100:
у Вас мнимая чёткость - небольшое изменение (класса A) и смысл кардинально меняется

Это изменения класса и должно приводить к соответствующему сообщению компилятора.

Если его нет, значит полная однозначность.

 
Ilyas:

Как временное решение, используйте оператор '!' (logical not)
Мы подумаем на решением (можно ли менять поведение сейчас, когда существует большое количество кодов ?)
Возможно, что для указателя, операция приведения к bool, будет операцией над указателем, а не объектом на который он указывает.

Без изменения существующих кодов не получится... рушится вся концепция указателей как динамических объектов

Т.е. вместо простой записи

class A {
public:
        bool operator*( A* a ) { return true; }
};
void OnStart()
{
        A *a, *b;
        if ( a * b );  //(1)
}

нужно будет писать путанную

        if ( *a * *b );//(2)

И все это ради чего? Чтобы можно было проверять указатель на NULL? - Для этого есть оператор сравнения:

        if ( a != NULL );//(3)

Зачем его дублировать?

 
A100:

рушится вся концепция указателей как динамических объектов

нет щас никакой концепции, объект и указатель на него смешаны в одну кучу
Причина обращения: