C++ 这条生产线在这个C++;密码?

C++ 这条生产线在这个C++;密码?,c++,reference,operators,C++,Reference,Operators,我正在测试点成员选择操作符和箭头成员选择操作符(.)和(->)之间的差异。 但我不明白,当我把这个引用等同于它自己的时候。它起作用了。如果我删除了上面两行中的任何一行。这给了我错误 #include <iostream> using namespace std; class count { public: void setX(int value) { x=value; } void printX() { cout<<x

我正在测试点成员选择操作符和箭头成员选择操作符(.)和(->)之间的差异。 但我不明白,当我把这个引用等同于它自己的时候。它起作用了。如果我删除了上面两行中的任何一行。这给了我错误

#include <iostream>
using namespace std;
class count
{
public:
   void setX(int value)
   {
      x=value;
   }
   void printX()
   {
      cout<<x<<endl;
   }
private:
   int x;
};
int main()
{
   count counter;
   count *counterPtr=&counter;
   count &counterRef=counterRef; // here! I mistakenly put the
                                 //to reference to itself. but it 
                                 //works fine.

   counter.setX(7);
   counter.printX();

   counterRef.setX(8);           
   counterRef.printX();     //it works fine as and prints the value

   (*counterPtr).setX(9);
   (*counterPtr).printX();

   counterPtr->setX(10);
   counterPtr->printX();
}
#包括
使用名称空间std;
班级人数
{
公众:
void setX(int值)
{
x=值;
}
void printX()
{

cout问题更可能是关于引用行如何比类或(.)和(->)运算符更有效。为什么在我将其初始化为自身时它没有给我错误。我指的是引用。编译器的可能副本会让你知道你正在做一些不可靠的事情(它也会给你一个要搜索的术语):“:21:11:警告:引用'counterRef'已用自身[-Winit self]初始化”"@xaxxon谢谢。但我不确定我是否能从重复的问题中理解。行
count&counterRef=counterRef;
创建了对类型为
count
的对象的引用。我能理解的是它是非法的?那么为什么它在我的编译器上工作?谢谢。你可以看到它从来没有真正构造过obj由于引用只是一个隐藏的指针,它很可能创建一个未初始化的引用,指向未定义的内存,该内存是UB,可能看起来“工作”有时。我在这里看到的是地址是0x0:但不确定为什么,或者是否以某种方式保证了这一点。问题更可能是关于参考线如何比类或(.)和(->)更有效运算符。当我将其初始化为自身时,为什么它没有给我错误。我指的是引用。编译器的可能副本会让您知道您正在做一些不可靠的事情(并且它也会给您一个要搜索的术语):“:21:11:警告:引用'counterRef'是用自身[-Winit self]初始化的。”@xaxxon谢谢。但我不确定我是否能从重复的问题中理解。行
count&counterRef=counterRef;
创建了对类型为
count
的对象的引用。我能理解的是它是非法的?那么为什么它在我的编译器上工作?谢谢。你可以看到它从来没有真正构造过obj等等。由于引用只是一个隐藏的指针,它很可能创建了一个指向未定义内存的未初始化引用,该内存是UB,有时可能看起来“工作”。我在这里看到的是地址是0x0:但不确定为什么,或者是否保证了这一点。