Почему ссылочная переменная внутри класса всегда занимает 4 байта независимо от типа?(в 32-битной системе) - PullRequest
6 голосов
/ 14 октября 2010

У меня есть код ниже, работающий на 32-битных окнах, visual-studio.

template <class T>
class Test
{
public:
 T &ref;
 Test(T &x)
  :ref(x)
 {}
};

int main()
{
 cout<<"sizeof Test<int> : "<<sizeof(Test<int>)<<endl;
 cout<<"sizeof Test<double> : "<<sizeof(Test<double>)<<endl;
 cout<<"sizeof Test<char> : "<<sizeof(Test<char>)<<endl;
}

Вывод:

sizeof Test<int> : 4
sizeof Test<double> : 4
sizeof Test<char> : 4

Компилятор, выдающий 4 байта для ссылочной переменной внутри класса irrespectтипа ссылки.Значение переменной не может быть сохранено в этих 4 байтах.

Какая информация будет храниться в этих 4 байтах?

Внутренне ли он хранит адрес референта?так что и ссылка, и референт могут записывать в одно и то же место для синхронизации друг с другом.

Или это имя референта сохраняется в таблице символов?

Ответы [ 2 ]

7 голосов
/ 14 октября 2010

Эти байты являются справочными.Внутренняя ссылка - это просто указатель, а указатели обычно используют 4 байта в 32-битной системе независимо от типов данных, поскольку это просто адрес, а не само значение.

0 голосов
/ 14 октября 2010

Почему ссылочная переменная внутри класса всегда занимает 4 байта независимо от типа?

Это не так!

C ++ 03 5.3.3

При применении к ссылке или типу ссылки, получается размер ссылочного типа .

Также 8.3.2говорит

не указано независимо от того, требуется ли ссылка для хранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...