2012-06-26 2 views
1

Я понимаю концепцию ссылочной переменной. Это псевдоним другой переменной.Варианты использования для ссылки на постоянную переменную

int varA = 100; 
int &varB = varA; 

Здесь varB является ссылкой на varA, и указывая на то же место памяти. Изменения одной переменной отражаются в другой.

Вопрос:

  1. а) int &c = 100;
    Какой смысл приведенного выше заявления, и как она отличается от следующего?
    б) int c = 100;

  2. Есть ли сценарий, в котором мы должны использовать 1 (а), а не 1 (б)?

+6

Если вы пытаетесь компиляции 1 (а) , то вы поймете, почему 1 (б) лучше. –

+0

У кого-нибудь есть Visual C++? Содержит ли 1 (a) там? Если я помню, он позволяет привязывать неконстантные ссылки к временным. –

+0

@BenjaminLindley это не так. –

ответ

3

Все правильно, кроме этого:

int &c = 100; //error 

Это даст ошибку компиляции, как в C++ 03 и C++ 11. Это связано с тем, что он пытается связать несущественную ссылку с временным объектом (созданным из 100), который запрещен.

В C++ 11, вы могли бы сделать это, однако:

int && c = 100; //ok 

Это называется RValue-ссылки.

Вы можете связать константную ссылку к временным, хотя (как в C++ 03 и C++ 11):

int const & c = 100; 

-

int c = 100; 

Он просто определяет объект c и инициализирует его 100. Здесь нет ссылки.

+0

Спасибо всем за ответ. вы упомянули, что мы могли бы связывать ссылку «const ссылаться на временную, хотя», в этом случае какая разница между int const & c = 100; и const int c = 100? – Whoami

+0

One - справка, другой нет. Изучите значение '&'. Практически здесь это не имеет особого значения (по крайней мере, я не могу сейчас думать о какой-либо разнице). – Nawaz

+0

Nawaz, может быть, я поставил вопрос по-другому, в каком случае можно использовать const & c = 100? я понимаю, что это: fun (const int & a), fun (123), затем временный объект «123», не будет скопирован в стек, скорее, он передается из сегмента данных, где «123» хранится ?. правильно ли мое понимание? – Whoami

2

1) int& c = 100; является незаконным, а второй - нет.

Я понял концепцию ссылочной переменной.

Если вы действительно поняли, ссылки, вы ожидаете, что после того, как вы c = 101 постоянную 100 вдруг превращается в 101?

2) Нет ответа, поскольку 1) является незаконным.

+0

мой ошибка. я не понял полностью. :). – Whoami

+0

@Whoami думает о ссылке как псевдоним. Прозвище. Когда вы говорите 'int & c = x', всякий раз, когда вы пишете' c', это похоже на то, что вы пишете 'x'. Это не имело бы смысла для не-const ссылки на константу - 'int & c = 100', потому что вы можете написать' c = 101', который * будет * переводить на '100 = 101', что, очевидно, не иметь смысл. –

+0

true :). спасибо за ответ :) – Whoami

3
int &c = 100 

недействительный код, вы не можете привязывать неконстантную ссылку на временную.

Чтобы сделать его действительным, необходимо const ссылка:

const int &c = 100; 

While,

int c = 100 

является действительным кодом. Он создает переменную с именем c типа int и инициализирует ее 100.

2
int& i = 100; 

Это незаконный.

Это законно сказать:

int const& i = 100; 
const int& i = 100; // same as above 

Не особенно полезной в этом контексте, но она должна работать для целей вызова функции:

void foo(int const& i) { ... } 
... 
    foo(100); 
Смежные вопросы