powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Так можно писать?
11 сообщений из 11, страница 1 из 1
Так можно писать?
    #34639103
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли так писать и полагаться, что проверка всегда и везде будет происходить слева направо?
Код: plaintext
1.
2.
3.
				if (list && !strcmp(list->name, name))
				{
					//....
				}
...
Рейтинг: 0 / 0
Так можно писать?
    #34639115
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос, что тебе надо :-)
сначала будет выполнена проверка if(list != 0) и если он (list) нулю всё-же равен, то strcmp выполняться не будет, ибо не за чем
...
Рейтинг: 0 / 0
Так можно писать?
    #34639119
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik пишет:
> Можно ли так писать и полагаться, что проверка всегда и везде будет
> происходить слева направо?
>
> if (list && !strcmp(list->name, name))

Да. Даже не можно, а нужно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Так можно писать?
    #34639140
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ясно, спасибо.
Я прекрасно понимаю, что я написал, у меня были сомнения по поводу тог, что проверка в любой среде происходит именно в таком порядке.
...
Рейтинг: 0 / 0
Так можно писать?
    #34639145
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv wrote:

> Да. Даже не можно, а нужно.
Вопрос. Есть гарантия, что любой компилятор именно так эту строчку поймет?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Так можно писать?
    #34639146
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TubrikЯсно, спасибо.
Я прекрасно понимаю, что я написал, у меня были сомнения по поводу тог, что проверка в любой среде происходит именно в таком порядке.

P.S. и что не будет проверяться второе значение, если первая проверка не дала положительного результата.
...
Рейтинг: 0 / 0
Так можно писать?
    #34639186
Tubrik: и что не будет проверяться второе значение, если первая проверка не дала положительного результата.

да, но только при условии что operator&& не переопределен
...
Рейтинг: 0 / 0
Так можно писать?
    #34640142
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik пишет:
> Я прекрасно понимаю, что я написал, у меня были сомнения по поводу тог,
> что проверка в любой среде происходит именно в таком порядке.
Это диктуется стандартами языков C и C++.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Так можно писать?
    #34640148
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErV пишет:
> > Да. Даже не можно, а нужно.
> Вопрос. Есть гарантия, что любой компилятор именно так эту строчку поймет?
Да, 100%, потому что стандарт.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Так можно писать?
    #34640328
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TubrikМожно ли так писать и полагаться, что проверка всегда и везде будет происходить слева направо?
Код: plaintext
1.
2.
3.
				if (list && !strcmp(list->name, name))
				{
					//....
				}


Если не переопределен оператор &&. Иначе, сначала будет вычесленно два аргумента, а потом выполнен оператор &&.
Непереопределенный оператор &&, по стандарту, гарантирует, что в случае false, второй оператор вычисляться не будет.
Именно поэтому всегда предостерегают использование переопредления операторов "&&", "||", ",".

Т.е. Если переопределяют эти операторы, то это специально должно быть где-то оговорено, т.к. применяется широка практика действия по стандарту.
...
Рейтинг: 0 / 0
Так можно писать?
    #34640573
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh пишет:

> Именно поэтому всегда предостерегают использование переопредления
> операторов "&&", "||", ",".
>
> Т.е. Если переопределяют эти операторы, то это специально должно быть
> где-то оговорено, т.к. применяется широка практика действия по стандарту.

На самом деле если семантика коньюнкции и дизьюнкции не меняется, то
легче определить оператор приведения к типу bool ( operator bool()).
Так не надо морочиться с коммутативностью и вообще с реализацией.
А если она меняется, то тут уж эти два значка && будут значить совсем
другое и тут уже программист будет думать по-другому.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Так можно писать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]