在编写类时,我一直是个好孩子,所有成员变量都以 m_ 为前缀:
class Test {
int m_int1;
int m_int2;
public:
Test(int int1, int int2) : m_int1(int1), m_int2(int2) {}
};
int main() {
Test t(10, 20); // Just an example
}
然而,最近我忘了这样做,最后写了:
class Test {
int int1;
int int2;
public:
// Very questionable, but of course I meant to assign ::int1 to this->int1!
Test(int int1, int int2) : int1(int1), int2(int2) {}
};
信不信由你,编译的代码没有错误/警告,并且分配正确进行!只有在签入代码之前进行最后检查时,我才意识到自己做了什么。
我的问题是:为什么我的代码会编译?C++ 标准中是否允许这样的事情,还是仅仅是编译器聪明的一个例子?如果您想知道,我使用的是 Visual Studio 2008