(){return&myDog;} }; int main(){ 自动w=包装器(); //方法1 w、 myDog.age=1; 从技术上讲,您所要求的是完全特定于系统/编译器的。实际上,指针和引用在实现中是相同的,c++,pointers,reference,C++,Pointers,Reference" /> (){return&myDog;} }; int main(){ 自动w=包装器(); //方法1 w、 myDog.age=1; 从技术上讲,您所要求的是完全特定于系统/编译器的。实际上,指针和引用在实现中是相同的,c++,pointers,reference,C++,Pointers,Reference" />

返回对成员变量数据的引用的开销 < >我是C++的新手,当类方法返回对原始数据(而不是指针或引用)的成员变量的引用时,会对引擎下面发生的事情感到困惑。下面是一个例子: #include <iostream> using namespace std; struct Dog { int age; }; class Wrapper { public: Dog myDog; Dog& operator*() { return myDog; } Dog* operator->() { return &myDog; } }; int main() { auto w = Wrapper(); // Method 1 w.myDog.age = 1; cout << w.myDog.age << "\n"; // Method 2 (*w).age = 2; cout << w.myDog.age << "\n"; // Method 3 w->age = 3; cout << w.myDog.age << "\n"; } #包括 使用名称空间std; 结构狗{ 智力年龄; }; 类包装器{ 公众: 狗我的狗; Dog&运算符*(){return myDog;} Dog*运算符->(){return&myDog;} }; int main(){ 自动w=包装器(); //方法1 w、 myDog.age=1; 从技术上讲,您所要求的是完全特定于系统/编译器的。实际上,指针和引用在实现中是相同的

返回对成员变量数据的引用的开销 < >我是C++的新手,当类方法返回对原始数据(而不是指针或引用)的成员变量的引用时,会对引擎下面发生的事情感到困惑。下面是一个例子: #include <iostream> using namespace std; struct Dog { int age; }; class Wrapper { public: Dog myDog; Dog& operator*() { return myDog; } Dog* operator->() { return &myDog; } }; int main() { auto w = Wrapper(); // Method 1 w.myDog.age = 1; cout << w.myDog.age << "\n"; // Method 2 (*w).age = 2; cout << w.myDog.age << "\n"; // Method 3 w->age = 3; cout << w.myDog.age << "\n"; } #包括 使用名称空间std; 结构狗{ 智力年龄; }; 类包装器{ 公众: 狗我的狗; Dog&运算符*(){return myDog;} Dog*运算符->(){return&myDog;} }; int main(){ 自动w=包装器(); //方法1 w、 myDog.age=1; 从技术上讲,您所要求的是完全特定于系统/编译器的。实际上,指针和引用在实现中是相同的,c++,pointers,reference,C++,Pointers,Reference,没有任何rational编译器会处理 (*x).y 及 不同的是,在封面下,两者通常在汇编语言中以类似的形式出现 y(Rn) 其中Rn是保存x地址的寄存器,y是y在结构中的偏移量 “问题是C++是建立在C上的,它是最常用的f**”编程语言。参考构造是一个围绕C的不合格参数传递方法的工作。你在帖子中有非常大量的代码用于一个非常具体的问题。请确保把A的帖子放在最小的一个。为什么您担心编译器在看到某些内容时的行为?除非您询问编译时间,否则这似乎与任何内容都无关。无论如何,编译器实际上看不到地址。直

没有任何rational编译器会处理

(*x).y

不同的是,在封面下,两者通常在汇编语言中以类似的形式出现

y(Rn)
其中Rn是保存x地址的寄存器,y是y在结构中的偏移量


“问题是C++是建立在C上的,它是最常用的f**”编程语言。参考构造是一个围绕C的不合格参数传递方法的工作。

你在帖子中有非常大量的代码用于一个非常具体的问题。请确保把A的帖子放在最小的一个。为什么您担心编译器在看到某些内容时的行为?除非您询问编译时间,否则这似乎与任何内容都无关。无论如何,编译器实际上看不到地址。直到运行时,它们才可用,此时编译器早就消失了。所有方法都是等效的。在程序集级别,一个引用只是一个指针。澄清一下,是否保证指针位置是在编译时而不是在运行时计算的?因为对
运算符->()
code是指
myDog
的地址是在运行时计算的,对吗?@xaxxon感谢您的反馈。我用一个较短的代码示例替换了代码示例,并澄清了问题。我在询问运行时性能。
y(Rn)