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:但不确定为什么,或者是否保证了这一点。