Я сталкивался с этим сценарием, когда писал небольшую программу на 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 Применительно к ссылке или типу ссылки, результатом является
размер ссылочного типа. При применении к классу, результат
количество байтов в объекте этого класса, включая любые дополнения
требуется для размещения объектов этого типа в массиве.
sizeof
ссылка будет возвращать размер объекта, на который ссылаются, в случае sizeof(ref)
это эквивалентно sizeof(int)
, который на вашей платформе 4.
Ваш класс, с другой стороны, должен хранить ссылку на int
Стандарт не определяет, как реализации должны достигать этого, но они обычно, если не универсально, хранятся как указатели за кулисами. sizeof(int*)
на вашей платформе предположительно 8, но детали не важны, все, что вам нужно знать, это то, что sizeof(Test)
это 8.