Ссылка как единственный член класса дает размер 8 для целого числа

Я сталкивался с этим сценарием, когда писал небольшую программу на c ++ для проверки ссылки в качестве члена класса.

Имея ссылку только как член класса, программа дает o / p 8.
Обычно ссылка дает размер как конкретный тип данных. Но почему здесь 8 (а не 4). Пожалуйста, помогите мне понять это.

#include<iostream>
using namespace std;

class Test {
int &t;
public:
Test(int &t):t(t) {}
};

int main()
{
int x = 20;
Test t1(x);
int &ref = x;
cout<<sizeof(ref)<<endl;
cout<<sizeof(t1)<<endl;
return 0;
}

Выход —

/home/user>./a.out
4
8

2

Решение

[Expr.sizeof]

2 Применительно к ссылке или типу ссылки, результатом является
размер ссылочного типа. При применении к классу, результат
количество байтов в объекте этого класса, включая любые дополнения
требуется для размещения объектов этого типа в массиве.

sizeof ссылка будет возвращать размер объекта, на который ссылаются, в случае sizeof(ref) это эквивалентно sizeof(int), который на вашей платформе 4.

Ваш класс, с другой стороны, должен хранить ссылку на intСтандарт не определяет, как реализации должны достигать этого, но они обычно, если не универсально, хранятся как указатели за кулисами. sizeof(int*) на вашей платформе предположительно 8, но детали не важны, все, что вам нужно знать, это то, что sizeof(Test) это 8.

4

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector