Полагаю, вам не следует слишком много думать об этой проблеме
Это происходит для конструкторов, но также для любого другого метода или даже функции. Например:
class MyBase
{
// etc.
virtual void doSomething() ;
} ;
class MyDerived : public MyBase
{
// etc.
virtual void DoSomething() ;
} ;
Или:
bool isOk(int value) { /* etc. */ }
bool isOK(double value) { /* etc. */ }
void doSomething(int value)
{
if(isOK(value)) // isOK(double) will be called
{
// Etc.
}
}
И это не только проблема регистра символов. Такая ошибка случается. Помощники IDE, такие как автозаполнение, могут несколько помочь, как и хороший код для юнит-тестирования (что-то, охватывающее все методы класса), но я не верю, что один компилятор мог бы защитить от такого ошибочного набора кода разработчика даже с дополнительными ключевыми словами.
А как насчет КОНСТРУКТОРА?
Что касается определения КОНСТРУКТОРА, упомянутого до меня, это плохая идея ИМХО:
Это поможет так же, как комментарий (и поэтому, почему бы не использовать / * CONSTRUCTOR * / вместо этого?), И если кто-то подумал об использовании слова CONSTRUCTOR в качестве определяющего символа, то вы можете поспорить, что кто-то другой будет иметь та же идея в каком-то заголовке, который вы включаете, но не владеете, и что он сломает ваш код ...