| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Ассоциативность операции &&
			 
			
			Честно... лень проверять просто, На вскидку, кто может сказать порядок выполнения операции "&&": 
		
		
		
		
		
		
		
	if (this.somef1() && this.somef2()) { .... } Если this.somef1() == false будет ли выполняться this.somef2() ? Смысла в выполнении явно нет (а в некоторых моментах есть!). сорри за тривиальный вопрос ![]() щас сам проверю....  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			нет, не будет
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Смысла в выполнении явно нет (а в некоторых моментах есть!).
		
	 
![]() Идея в том, нужно разделять функции, которые выполняют какую-то работу activity и функции предназначенные для проверки каких-то условий condition. Это не закон, но рекомендация, следование которой позволит избежать многих ошибок. Например, код в somef2() не был выполнен, так как так решил оптимизатор. Например, кто-то решил дважды дернуть somef2(), чтобы выполнить какую-то проверку и при этом неосознанно выполнил код вложенный в somef2(). Насколько я помню даже в стандарте C++ не описано поведение компилятора в данном случае и каждый производитель может делать своб реализацию данного поведения. Это приведет к тому, что ваш код будет работать по разному, будучи откомпилированным разными компиляторами. Или даже откомпилированным в разных режимах - debug и release mode.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Насколько я помню даже в стандарте C++ не описано поведение компилятора в данном случае....
		
	 
  :Цитата: 
	
		
			5.14 Logical AND operator [expr.log.and] 
1 logical-and-expression: inclusive-or-expression logical-and-expression && inclusive-or-expression The && operator groups left-to-right. The operands are both implic- itly converted to type bool (_conv_). The result is true if both operands are true and false otherwise. Unlike &, && guarantees left- to-right evaluation: the second operand is not evaluated if the first operand is false. 2 The result is a bool. All side effects of the first expression except for destruction of temporaries (_class.temporary_) happen before the second expression is evaluated.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ну дык - в плюсах при & отработают обе стороны  
		
		
		
		
		
		
		
	![]() а в Ахапте только одна (если она конечно сразу же 0) Мне было надо чтоб сработали обе. И стало интересно если ли подобная функция тут .  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Ну дык - в плюсах при & отработают обе стороны
		
	 
Более того, я привел пункт стандарта который четко оговаривает такое поведение. Стандарт можно почитать вот здесь http://ra.dkuug.dk/jtc1/sc22/open/n2356/  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Мне было надо чтоб сработали обе.
		
	 
PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Чтобы сработали обе стороны, можно использовать оператор &, а не &&.  
		
		
		
		
		
		
		
	Т.е. if (this.somef1() & this.somef2()) { .... }  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А откуда это ?   В "Руководстве разработчика" про это ни слова.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			& - это побитовое "и".  
		
		
		
		
		
		
		
	Прикольно, но действительно с ним наблюдается другое поведение, чем с логическим "и" (&&) Правда здесь возможны интересные эффекты, если сравниваются не boolean, а целые. Например 2&1 = 0   
		 | 
| 
	
 | 
| Теги | 
| x++ | 
| 
	
	 | 
	
			 
			Похожие темы
		 | 
	||||
| Тема | Ответов | |||
| Параллельные операции в маршрутах | 10 | |||
| Как для ГК операции в LedgerTrans найти соответствующую операцию в VendTrans? | 20 | |||
| ОС: Опреации & модели учета | 2 | |||
		
  |