c++ - 为什么无论类型如何,类中的引用变量总是占用 4 个字节? (在 32 位系统上)

标签 c++ visual-studio-2008

我有以下代码,在 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/

相关文章:

c++ - boost::function 中的命名空间循环或代码泄漏?

c++ - 为什么我的 C++ 程序不打印 LinkedList 的所有项目?

c++ - 如何解决堆栈 "smashing detected"

debugging - Visual Studio - 附加到进程

html - 更改 Visual Studio 2008 HTML 缩进样式

c# - 带有 Framework 2.0 的 Visual Studio 2010 命令行

c++ - 具有多态性的派生类中的重载函数 (C++)

c++ - 如何在 Clang 中获取条件右括号的位置?

c++ - 为什么 boost::interprocess::managed_shared_ptr to non-const 不能转换为 managed_shared_ptr to const

visual-studio - 在 Visual Studio 2008 中即时编译非常慢