Неприятность в C++ это когда нельзя вызвать виртуальный метод из конструктора, всегда вызывается метод базового класса. Что же касается длин строк, то тут надо понимать, что такое «кодировка символов». Когда её придумывали то сделали её аж о 128 символах, посчитав, что для английского языка этого хватит. Не забыли про западноевропейские языки с их диакритикой, выделив под них ещё 128 символов. Итого 256 символов кодируются одним байтом. Прекрасно. Но катастрофически мало. Использование различных кодовых страниц ситуацию только усугубило. Поэтому и придумали в конце концов кодировку utf-8 содругие кодировки, в которых различные символы имеют различную длину в байтах. Первые 128 так и остались однобайтовыми, а вот все остальные могут быть двухбайтовыми и даже больше. Теперь давайте зададимся вопросом, а что же тогда такое «длина строки»? В чём она измеряется? В байтах, словах или в символах? А если там в строке комбинирующие символы их как вообще считать? Вот и получается что у одного компилятора длина считается по байтам, у другого – по символам. И настраивается в настройках компиляции, коим несть числа.