Как понять адрес входа в C ++

У каждого объекта есть свой собственный адрес. Поскольку bar и retVal - разные объекты, у них разные адреса. Перемещение не изменяет адрес объекта.

. Что такое перемещение, это позволяет перемещать кишки объекта с одного объекта на другой. В зависимости от того, как создается класс, это может быть очень большим повышением производительности. Например, если у нас есть класс, подобный std::vector, он будет иметь указатель на него в выделенном хранилище. Перемещение позволяет просто скопировать указатель и размер с перемещенного объекта с перемещенного на объект. Затем вы просто устанавливаете указатель в перемещенном объекте на нулевой указатель и задаете размер 0. Теперь нам не нужно было копировать какие-либо элементы или выделять какое-либо хранилище, которое нам пришлось бы делать, если бы мы делали копию вместо .

-1
задан Ted Lyngmo 19 January 2019 в 02:41
поделиться

3 ответа

Один из способов взглянуть на это - переместить ссылочный знак с

int &R = x;

на

int& R = x;

R - это int& - это ссылка на [116 ], что означает, что R не освободит память, выделенную x, когда R выйдет из области видимости, но это будет ссылка на x, пока x живет. Настоящим объявляется R, и его объявление не может быть изменено, поэтому, если вы попытаетесь:

<type declaration> R = <value>

, оно должно завершиться неудачей - поскольку R уже объявлено.

Но вы можете присвоить что-либо для того, что R является ссылкой на

R = <value>

... до тех пор, пока тип value равен преобразуется в тип, на который ссылается R (0-1 операторы преобразования).

0
ответ дан Ted Lyngmo 19 January 2019 в 02:41
поделиться

Я не понимаю строку, где переменная x назначена адресу R

int &R = x;

В приведенной выше строке объявляется reference-to-int с именем R, и делает его ссылкой на уже существующую переменную x. то есть в любом коде функции ниже строки, R будет действовать как псевдоним для x.

//int &R = &x;   // ERROR!

Приведенная выше строка (когда она не закомментирована) выдает ошибку, поскольку значение в правой части = имеет тип int * (т.е. это указатель на int), в то время как значение на левой стороне = имеет тип int & (то есть это ссылка на int).

В C ++ ссылки действуют в некотором смысле как указатели, но с точки зрения их синтаксиса они в основном следуют тем же правилам, что и тип, на который они ссылаются - это потому, что они действуют как псевдонимы для значения этого типа , Так что в этом случае, так же как вы не можете назначить указатель на int, вы также не можете назначить указатель на int &:

int R = &x;   // This would also be an error
0
ответ дан Jeremy Friesner 19 January 2019 в 02:41
поделиться

Я не понимаю строку, где переменная x назначена адресу R

Синтаксис C ++ может сбивать с толку, но то, что вы видите, не является Переменная присваивается адресу.

Здесь амперсанд имеет другое значение: R - это переменная типа int&, то есть ссылка на int. Это не значит «взять адрес R». Более или менее это означает, что R теперь является псевдонимом x. Он ведет себя как int, а не как int* (указатель на int). Если вы напечатаете их значение, вы обнаружите, что оно одинаково, и если вы измените одно из них, вы также измените другое.

Вы можете взглянуть на этот вопрос для всестороннего объяснения ссылок.

0
ответ дан Fabio Turati 19 January 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: