3 c++
有人告诉我,当引用是类的数据成员时,它们会占用内存,因为它们将被编译器转换为常量指针。这是为什么?就像为什么编译器(我知道它通常是特定于实现的)在它们是类的一部分时而不是在它们是临时变量时将引用作为指针?所以在这段代码中:
class A{
public:
A(int &refval):m_ref(refval){};
private:
int &m_ref;
}
Run Code Online (Sandbox Code Playgroud)
m_ref 将被视为常量指针(即它们确实占用内存)。
然而,在这段代码中:
void func(int &a){
int &a_ref = a;
}
Run Code Online (Sandbox Code Playgroud)
编译器只是用实际变量替换引用(即它们不占用内存)。
因此,为了简单一点,我的问题基本上是:当常量指针是数据成员时,比它们是临时变量时,对它们进行引用更有意义吗?
C++ 标准仅定义引用的语义,而不定义它们的实际实现方式。所以这个问题的所有答案都是特定于编译器的。(愚蠢但合规的)编译器可能会选择将所有引用存储在硬盘上。只是事实证明,将引用存储为类成员的常量指针,并在可能的情况下用实际的引用替换引用的出现是最方便/最有效的。
作为编译器无法在编译时决定引用绑定到哪个对象的情况的示例,请考虑以下情况:
#include <iostream>
bool func() {
int i;
std::cin >> i;
return i > 5;
}
int main() {
int a = 3, b = 4;
int& r = func() ? a : b;
std::cout << r;
}
Run Code Online (Sandbox Code Playgroud)
所以一般来说程序必须在运行时存储一些关于引用的信息,有时,对于特殊情况,它可以在编译时证明引用绑定到什么。
| 归档时间: |
|
| 查看次数: |
515 次 |
| 最近记录: |