2015-01-28 3 views
-1

Я пытался узнать, как использовать дизайн синглтон шаблон и наткнулся на это:Как это возвращает ссылку?

static S& getInstance() 
    { 
     static S instance; 
     return instance; 
    } 

я заметил здесь, что она возвращает instance, не следует ли предположить, чтобы вернуть instance&?

Редактировать: Следует также упомянуть, что компилятор, похоже, не жалуется.

ответ

2

Нет, это правильно, как написано. Компилятор создаст и вернет ссылку на instance по функции getInstance.

Вы спрашиваете, должно ли оно быть instance&. Прежде всего, это не является синтаксически действительным. А как насчет &instance? Это займет адрес instance и поэтому возвратит instance *.

Множество применений оператора & являются общим источником путаницы. Вот быстрый «чит-лист», который не использует сложную терминологию из стандарта:

Бинарная (два аргумента) версия & применяется к двум экземплярам переменных и представляет побитовое И (за исключением случаев перегрузки).

unsigned int a = 7; 
unsigned int b = 3; 
unsigned int c = a & b; // c = 3 

Унарная (один аргумент) версия & при применении к типу обозначает ссылку на тип. Пример:

int a = 7; 
int& ref_a = a; // ref_a is a reference to a 

Унарный (один аргумент) версия & при применении к переменной обозначает оператор address-of и дает указатель на переменную.

int a = 7; 
int* ptr_a = &a; 
7

return instance; действительно возвращает ссылку на instance. Это так же, как

int& r = a; 

для некоторого int a создает ссылку на a без необходимости писать a& или что-то вроде этого.