Я всегда был хорошим мальчиком при написании своих классов, префикс всех переменных-членов с помощью 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) {}
};
Верьте или нет, код, составленный без ошибок/предупреждений и назначений, прошел правильно! Это было только при выполнении окончательной проверки, прежде чем проверять мой код, когда я понял, что сделал.
Мой вопрос: почему мой код скомпилировался? Что-то вроде этого разрешено в стандарте С++, или это просто случай, когда компилятор умный? Если вам интересно, я использовал Visual Studio 2008