Различные синтаксисы конструкции в С++ всегда меня путают. В еще один вопрос было предложено попробовать инициализировать строку так:
std::string foo{ '\0' };
Это работает и создает предполагаемый результат: строка длиной 1, содержащая только нулевой символ. При тестировании кода я случайно набрал
std::string foo('\0');
Это компилируется отлично (без предупреждений даже с -Wall
), но завершается во время выполнения с помощью
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_M_construct null not valid
Aborted (core dumped)
Теперь, насколько я могу судить, нет конструктора для std::string
, который принимает один символ в качестве аргумента, и это гипотеза подтверждается, когда я пытаюсь передать персонажа косвенно.
char b = '\0';
std::string a(b);
Это создает хорошую, длинную ошибку компиляции. Как это делает
std::string a('z');
Итак, мой вопрос: что позволяет std::string a('\0');
компилировать, а что отличает его от std::string a{ '\0' };
?
Сноска: компиляция с использованием g++
в Ubuntu. Это не ударит меня как ошибка компилятора, но на всякий случай...