BerthaDusStuf Ответов: 1

Я получаю сообщение об ошибке, говорящее мне, что я должен использовать == для назначения переменной


Я написал этот код, чтобы проверить что-то для некоторого кода, который я пишу, и он работает только в том случае, если я использую == , а не =:

#include <iostream>
использование пространства имен std;
тап_п ()
{
инт internal_organ_cream = 5;
инт liquid_organs = 7;
&ампер;internal_organ_cream = &ампер;liquid_organs;
}

Я попытался запустить его так, но это не сработало, но когда я изменил = на a==, это сработало. Я не понимаю, почему, потому что я думал, что == был для того, когда вы проверяете, а не когда вы назначаете, потому что здесь я пытаюсь сделать internal_organ_cream ссылкой на liquid_organs.

Что я уже пробовал:

ничего....................................................................

1 Ответов

Рейтинг:
10

OriginalGriff

Это из-за "&" перед вами. internal_organ_cream - уберите их обоих, и это сработает:

int internal_organ_cream = 5;
int liquid_organs = 7;
internal_organ_cream = liquid_organs;
Когда вы ставите "&" перед именем переменной, он возвращает адрес переменной, а не ее содержимое - но это будет объяснено позже, когда вы перейдете к указателям. На данный момент просто не используйте их вообще!


BerthaDusStuf

Привет, спасибо за ваш ответ, да, я действительно знаю, что делает &, и у меня также есть изрядная часть knoledge на указателях, но я все еще не знаю, почему там есть двойное равенство, а не одиночное. это что-то такое, о чем я узнаю, или этому есть простое объяснение? кроме того я не хочу делать это без амперсанда потому что я хочу чтобы он имел ту же самую резервную память а не делал копию

OriginalGriff

Пожалуйста, не играйте с глупыми комментариями - вы не приблизитесь к максимальной длине, но вы будете раздражать людей, ширина браузера которых в результате становится "все смешным"... Я удаляю его для вас, чтобы вы не получили ярлык "оскорбительный / троллинг".

Вам не нужно "==" для выполнения задания - причина, по которой он хотел его вместо одного"=", заключалась в том, что & перед первой переменной изменил его с lvalue на rvalue.
Значение lvalue может появиться слева от присваивания, а значение rvalue - нет-другое дело, что значение lvalue может быть назначено или изменено там, где значение rvalue не может быть изменено.
Левосторонних значений переменных, как "я", разыменование указателей, как "пи*", элементы массива, как модуль arr[10], и так далее.
Rvalues-это константы типа 666 или вычисленные значения строки "i * 2". И адреса переменных, конечно, как "&i".

Когда вы добавили амперсанд, вы изменили "internal_organ_cream" с lvalue на rvalue, поэтому компилятор предположил, что вы можете неправильно ввести назначение "=" и предназначили сравнение"==", и выдал вам соответствующее сообщение об ошибке / предупреждении.

BerthaDusStuf

о'кей, но потом я попробовал запустить эту программу, и она изменила ее значение, так что она не сравнивалась, а фактически присвоила ей это значение

OriginalGriff

Именно этого ты и хотел от него ... разве не так?

OriginalGriff

А длинное послание? Это также раздражает людей, которые получают 4K-строку "d", доставленную в их почтовый ящик ...