Я всегда был хорошим мальчиком, когда писал свои классы, добавляя все переменные-члены к 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