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

 
fxsaber #:

Вы выбрали авторитет.

Я привел пример (доказательство) и Вам его не опровергнуть

 
A100 #:

Я привел пример и Вам его не опровергнуть

Снова выбрали авторитет, теперь вместо GPT стал Microsoft. Определяемые пользователем операторы - всегда методы.

Выделенное может быть любой отсебятиной. В данном случае даже не bool, как ниже.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

A100, 2024.01.31 17:40

bool f( int i ) { Print( i ); return i; }
void OnStart()
{
    if ( f(0) && f(1) );
}

Результат: 0

т.е. правый не вычисляется вообще

Ваше понимание запутано из-за применения слов оператор и одинакового синтаксиса для && и operator&&.

 
fxsaber #:

Определяемые пользователем операторы - всегда методы.

Выделенное может быть любой отсебятиной. В данном случае даже не bool, как ниже.

Ваше понимание запутано из-за применения слов оператор и одинакового синтаксиса для && и operator&&.

struct A
{
  int i;
  
  A operator &&( const A& ) {A a; return(a); }
};
  
void OnStart()
{
  A a;
  
  (a && a).i = 0;
}

Это завуалированный метод ради удобства/гибкости написания.

 
fxsaber #:

Снова выбрали авторитет, теперь вместо GPT стал Microsoft. Определяемые пользователем операторы - всегда методы.

Выделенное может быть любой отсебятиной. В данном случае даже не bool, как ниже.

Ваше понимание запутано из-за применения слов оператор и одинакового синтаксиса для && и operator&&.

Не только Microsoft - возьмите любой (!) C++ компилятор (кроме MQL)

Слова не нужны - нужен пример, доказывающий, что Microsoft и все остальные (кроме MQL) - не правы

Ваш пример аналогии с функцией не подходит, потому что как минимум приоритет у перегруженных операторов сохраняется (даже в MQL), а значит уже нет полной аналогии

 
A100 #:

Не только Microsoft - возьмите любой (!) C++ компилятор (кроме MQL)

Слова не нужны - нужен пример, доказывающий, что Microsoft и все остальные (кроме MQL) - не правы

Логика доказательств не предполагает наличие авторитетов. Мы обсуждаем язык программирования, в котором поведение компилятора либо специально было запрограммировано (1) так, либо просто вышло, как получилось (2).

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

Если второе - то это случайность.

 
fxsaber #:

Логика доказательств не предполагает наличие авторитетов. Мы обсуждаем язык программирования, в котором поведение компилятора либо специально было запрограммировано (1) так, либо просто вышло, как получилось (2).

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

А чем Вас объяснение чата не устраивает?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

A100, 2024.01.31 18:47

Важно помнить, что перегрузка расширяет возможности языка, а не изменяет язык

Нельзя менять приоритет и ассоциативность (слева направо или справа налево) операторов.

Добавлю из справки по MQL

Операция

Описание

Порядок выполнения

&&

Логическая операция И

Слева направо

 
A100 #:

А чем Вас объяснение чата не устраивает?

Вы прикалываетесь?!

 
fxsaber #:

Вы прикалываетесь?!

У перегруженного && теряется только ленивость, но сохраняется приоритет и ассоциативность. Первый раз вижу, чтобы в Википедии что то было выделено, да еще и фиолетовым цветом - видимо это специально сделали для таких как Вы - нежелающих признать очевидные вещи:

Обычные операторы[править | править код]

Важно помнить, что перегрузка расширяет возможности языка, а не изменяет язык, поэтому перегружать операторы для встроенных типов нельзя. Нельзя менять приоритет и ассоциативность (слева направо или справа налево) операторов. Нельзя создавать собственные операторы и перегружать некоторые встроенные:  :: . .* ?: sizeof typeid . Также операторы  && || ,  теряют свои уникальные свойства при перегрузке: ленивость для первых двух и очерёдность для запятой (порядок выражений между запятыми строго определён, как лево-ассоциативный, то есть слева-направо).

 
A100 #:

Также операторы  && || ,  теряют свои уникальные свойства при перегрузке: ленивость для первых двух и очерёдность для запятой (порядок выражений между запятыми строго определён, как лево-ассоциативный, то есть слева-направо).

Забыли выделить.

 
A100 # :

У перегруженного && теряется только ленивость , но сохраняется приоритет и ассоциативность . Первый раз вижу, чтобы в Википедии что то было выделено, да еще и фиолетовым цветом - видимо это специально сделали для таких как Вы - нежелающих признать очевидные вещи:

Обычные операторы [ править  |  править код ]

Важно помнить, что перегрузка расширяет возможности языка, а не изменяет язык, поэтому перегружать операторы для встроенных типов нельзя. Нельзя менять приоритет и ассоциативность (слева направо или справа налево) операторов . Нельзя создавать собственные операторы и перегружать некоторые встроенные:  :: . .* ?: sizeof typeid . Также операторы  && || ,  теряют свои уникальные свойства при перегрузке:  ленивость  для первых двух и очерёдность для запятой (порядок выражений между запятыми строго определён, как лево-ассоциативный, то есть слева-направо).

Википедия не предоставляет источника для этого утверждения об ассоциативности. Ты сам это написал? ;-)

https://en.cppreference.com/w/cpp/language/operators#Rarely_overloaded_operators