我有以下代码,在 32 位 Windows 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 个字节。这4个字节不能存储变量值。
编译器将在这 4 个字节中存储什么信息?
它是否在内部存储了 referent 的地址?这样引用和引用都可以写入相同的位置以相互同步。
或者它是否在符号表中存储了指示对象的名称?
最佳答案
那些字节是引用。引用在内部只是一个指针,指针在 32 位系统上通常使用 4 个字节,无论数据类型如何,因为它只是一个地址,而不是值本身。
关于c++ - 为什么无论类型如何,类中的引用变量总是占用 4 个字节? (在 32 位系统上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3931167/