Я экспериментировал с C++ Insights
и получил результат, который меня удивил и который я не совсем понимаю. Я надеялся, что кто-то может обеспечить некоторое освещение.
Данный фрагмент кода:
#include <string>
int main()
{
std::string a {"123"};
std::string b = {"123"};
std::string c = "123";
std::string d("123");
}
Я по крайней мере ожидал, что a
будет инициализирован иначе, чем c
. С c
я ожидал, что будет скопирована какая-то временная строка, а для a
я ожидал, что только конструктор будет вызван напрямую.
Вот ссылка на c++ insights
: здесь (Вы должны нажать кнопку воспроизведения).
Каждый из различных способов инициализации строки одинаков. Это действительно удивило меня. Я начал с c ++ 17, а затем переключился на c ++ 11, что дало нечто большее, чем я ожидал.
Значит ли это, что все типы init в c ++ 17 теперь одинаковы? - есть ли название для этого, потому что я думал, что единый init был только с фигурными скобками {}
- все ли теперь единообразный init?