0 / 0 / 0
Регистрация: 13.10.2022
Сообщений: 44
1

Разница между if(a=b) if(a==b)

13.10.2022, 14:13. Показов 1041. Ответов 15
Метки c++ (Все метки)

Author24 — интернет-сервис помощи студентам
Она есть, потому что "важно! не стоит путать []", но я не понямаю
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2022, 14:13
Ответы с готовыми решениями:

Какая разница между различными сокетами (например, между 775 и 1155)?
Обясните пожалуйста какая разница между сокетами, пример есть сокет 775 и 1155 я понимаю что разем...

Разница между or, and и in
Всем дарова! Я две недели назад начал учить питон, но я так и не могу врубить какая конкретная...

Разница между С и С++
Если не брать во внимание объекты и классы, то разница состоит только лишь в cin, cout и директивах?

Разница между 64 и 32
Здравствуйте, уважаемые эксперты, недавно на ноутбуке умер жесткий диск, в сервсисе его сменили, и...

15
Заблокирован
13.10.2022, 14:19 2
a = b возвращает b, a == b возвращает true (1) или false (0).
1
2105 / 1192 / 496
Регистрация: 11.10.2018
Сообщений: 6,000
13.10.2022, 14:19 3
Присвоить значение в первом случае и сравнение во втором.
1
фрилансер
5497 / 5093 / 1047
Регистрация: 11.10.2019
Сообщений: 13,333
13.10.2022, 14:27 4
Лучший ответ Сообщение было отмечено Itbkydc как решение

Решение

Цитата Сообщение от Itbkydc Посмотреть сообщение
if(a=b)
объект a принимает значение из объекта b, затем возвращается значение (bool)a. Этот результат проверяется в if

Цитата Сообщение от Itbkydc Посмотреть сообщение
if(a==b)
возвращается результат сравнения объектов a и b, тип bool. Этот результат проверяется в if
1
Заблокирован
13.10.2022, 14:45 5
Цитата Сообщение от Алексей1153 Посмотреть сообщение
затем возвращается значение (bool)a
Зачем врёшь-то?
Разница между if(a=b) if(a==b)
0
фрилансер
5497 / 5093 / 1047
Регистрация: 11.10.2019
Сообщений: 13,333
13.10.2022, 14:49 6
Verevkin, и что именно не так ?

Добавлено через 2 минуты
Verevkin, а, ну я понял, что тебя смутило. Я немного неправильно выразился - под "возвращает значение" я там имел в виду - проверку под if

а само значение выражения изначально, конечно же, == a
0
Заблокирован
13.10.2022, 14:50 7
Цитата Сообщение от Алексей1153 Посмотреть сообщение
и что именно не так ?
Цитата Сообщение от Алексей1153 Посмотреть сообщение
затем возвращается значение (bool)a
Возвращается не (bool)a, см. скриншот.

Добавлено через 40 секунд
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Я немного неправильно выразился
Это не "немного неправильно", а чистейшая деза.
Не делай так больше.
0
фрилансер
5497 / 5093 / 1047
Регистрация: 11.10.2019
Сообщений: 13,333
13.10.2022, 14:50 8
Verevkin, см. комментарий выше
0
Заблокирован
13.10.2022, 14:51 9
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
int main()
{
  int a = 1, b = 2;
  int x = (a = b);           // <----------- присваивание
  cout << x << '\n';         // 2
  cout << (bool)x << '\n';   // 1
  return 0;
}
0
фрилансер
5497 / 5093 / 1047
Регистрация: 11.10.2019
Сообщений: 13,333
13.10.2022, 14:55 10
Verevkin, исправленная фраза, спешиал фор ю:
"объект a принимает значение объекта b, затем значение объекта a кастится к типу bool, этот результат проверяется в if"
0
Заблокирован
13.10.2022, 15:08 11
Цитата Сообщение от Алексей1153 Посмотреть сообщение
значение объекта a кастится к типу bool, этот результат проверяется в if"
Да не кастится там ничего и никуда, а просто результат сравнивается с НУЛЁМ. Если равно, переход. Никакого приведения типа к bool (true/false) там нет и быть не может, это лишняя операция, которая там нахер не нужна.

Разница между if(a=b) if(a==b)
0
фрилансер
5497 / 5093 / 1047
Регистрация: 11.10.2019
Сообщений: 13,333
13.10.2022, 15:18 12
Verevkin, я говорю про язык C++, а не про машинные коды. Как там это компилятор реализует в машинных кодах, да ещё оптимизатором пройдётся - это уже дело десятое

Добавлено через 1 минуту
Verevkin, держи занятную ссылочку для экспериментов https://cppinsights.io/

"выполни" там следующий код
C++
1
2
3
4
5
6
7
8
int main()
{
  int a=1;
  int b=2;
  if(a=b)
  {
  }
}
Добавлено через 34 секунды
там показывается вся подноготная неявных преобразований и так далее
0
Заблокирован
13.10.2022, 15:19 13
Цитата Сообщение от Алексей1153 Посмотреть сообщение
я говорю про язык C++, а не про машинные коды. Как там это компилятор реализует в машинных кодах, да ещё оптимизатором пройдётся - это уже дело десятое
100500-е!

0
фрилансер
5497 / 5093 / 1047
Регистрация: 11.10.2019
Сообщений: 13,333
13.10.2022, 15:20 14
Verevkin, не за что, обращайся
0
18833 / 9835 / 2404
Регистрация: 30.01.2014
Сообщений: 17,273
13.10.2022, 18:48 15
Цитата Сообщение от Verevkin Посмотреть сообщение
Да не кастится там ничего и никуда, а просто результат сравнивается с НУЛЁМ. Если равно, переход. Никакого приведения типа к bool (true/false) там нет и быть не может, это лишняя операция, которая там нахер не нужна.
Приведение к bool есть. Мы говорим про язык, а не про реализацию.
Спецификация: https://eel.is/c++draft/conv#general-2
Expressions with a given type will be implicitly converted to other types in several contexts:
....
When used in the condition of an if statement ([stmt.if]) or iteration statement ([stmt.iter]). The destination type is bool.
Реализация вправе пропустить нормализацию к 0 и 1 и сразу сравнить с нулем, но грамотный программист должен понимать, например, откуда в этом коде возьмется требование наличия преобразования к bool:
C++
1
2
3
4
5
6
7
8
9
struct A {};
 
void foo() {
 
    A a, b; 
    if(a = b) { // error: could not convert '(b, (* & a))' from 'A' to 'bool'
        //.....
    }
}
https://godbolt.org/z/xEPo511d7
0
Вездепух
Эксперт CЭксперт С++
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,053
13.10.2022, 20:05 16
Цитата Сообщение от Verevkin Посмотреть сообщение
Да не кастится там ничего и никуда, а просто результат сравнивается с НУЛЁМ.
Это в С "результат сравнивается с НУЛЁМ".

В С++ - именно контекстно преобразовывается к типу bool. Причем оно так хочет в тип bool, что способно вызывать даже explicit преобразования. (Explicit преобразования к bool - способно, explicit преобразования к промежуточным типам, вроде int - нет.)
0
13.10.2022, 20:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2022, 20:05
Помогаю со студенческими работами здесь

Разница между == и IS
Те, кто уже знает многое, объясните начинающему, в чем разница этих двух операторов сравнения: == и...

Разница между с# и c++
Доброго времени суток. Недавно решил перейти с плюсов на c#. Допустим если в плюсах есть функции,...

Разница между v1.1 и v2.0
Доброго времени суток, появилась потребность обновить прошивку биоса. Ища прошивку на сайте...

Разница между С# и С++
Привет всем, до этого времени я как то программировал как любитель на С, и С++ ну и пробовал и...

Разница между != и <>?
есть ли разница между операторами != и &lt;&gt;, или они полностью эквивалентны? или &lt;&gt; это эквивалент...

Разница между =, == и ===
вопрос в заголовке)

Разница между j++ и ++j
Есть ли разница между for ( j=0; j &lt; n; j++) и ( j=0; j &lt; n; ++j) Видел , что так и так пишут....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru