C++ interview about operator
下面是代码,它基本上实现了名为
1 2 3 4 5 6 7 8 9 10 11 12 | CMyString& CMyString::operator =(const CMyString &str) { if(this == &str) return *this; delete []m_pData; m_pData = NULL; m_pData = new char[strlen(str.m_pData) + 1]; strcpy(m_pData, str.m_pData); return *this; } |
实例是通过引用传递的,第一个"if"正在检查传入的实例是否为自身。我的问题是:为什么用
另外,我只想确保
isn't str already contains the address of the instance
不。引用是对象本身。它不是指向对象的指针。
(即,在功能声明中,
1 | CMyString& CMyString::operator =(const CMyString *str); |
但事实并非如此。
操作员和参考操作员的地址不同。
除了作为运算符的地址之外,在C++中使用AN&AMP作为引用声明符。意思不一样。
1 2 3 4 | int target; int &rTarg = target; // rTarg is a reference to an integer. // The reference is initialized to refer to target. void f(int*& p); // p is a reference to a pointer |
如果获取引用的地址,则返回其目标的地址。使用前面的声明,&rtarg与&target的内存地址相同。
实际上,一个由符号EDCOX1(6)所表示的变量引用在类型名底层实现通常是指针之后,C++标准似乎并不指定它。
在其用法中,在语法级别,引用的使用方式类似于同一类型的非引用值,即更严格地说:
如果变量类型为
如果您必须写入
有关引用和指针的详细信息,请参阅以下问题:
- 当应用于变量名时,*和&;的含义是什么?
- C++中指针变量与引用变量的区别是什么?
- 为什么"this"是指针而不是引用?
传递给赋值运算符的
注意,
请考虑以下示例:
1 2 3 4 5 6 7 8 9 | int i = 42; int & refToI = i; // A reference to i refToI = 99; std::cout << i; // Will print 99 int j = 42; int * pJ = &j; // A pointer to j *pJ = 99; std::cout << j; // Will print 99 |
如果传递的对象是