すべてのメンバー変数の前に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++標準で許可されていますか、それとも単にコンパイラが賢い場合ですか?ご参考までに、私はVisualStudio2008を使用していました。