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

 
A100 #:

Прямого отношения не имеет, а косвенное имеет

Только синтаксис.

 
A100 #:

Разберитесь в этом результате и все станет понятно

Компилятор в данном случае имеет баг, потому что у него неодинаковое поведение.

 
fxsaber #:

&& в данном случае никакого отношения не имеет к operator&&. Они только пишутся одинаково.

operator&& - это метод, имеющий удобный синтаксис применения в некоторых ситуациях.

Этот метод обязан работать одинаково с остальными методами.

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

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

fxsaber, 2024.01.31 14:36

struct A { int i; void f( int ) { Print(__FUNCSIG__); } };

A g() { Print(__FUNCSIG__); A a; return(a); }

int Rand() { Print(__FUNCSIG__); return(0); }

void OnStart()
{
  g().f(Rand());
}


Результат.

int Rand()
A g()
void A::f(int)


Т.е. сначала вычисляется входной параметр, а затем - все остальное.

Если нет одинакового поведения - баг. А какое правило - дело компилятора.
 
fxsaber #:

Только синтаксис.

Не только синтаксис, но и приоритеты сохраняются. Если не разбираетесь в элементарном - лучше промолчать

 
A100 #:

Не только синтаксис, но и приоритеты сохраняются. Если не разбираетесь в элементарном - лучше промолчать

Взаимно.

 
fxsaber #:

Взаимно.

Даже GPT чат знает:

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

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

 
A100 #:

Даже GPT чат знает:

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

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

 
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;
}

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

Причина обращения: