Различные синтаксисы конструкции в С++ всегда меня путают. В еще один вопрос было предложено попробовать инициализировать строку так:
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. Это не ударит меня как ошибка компилятора, но на всякий случай...