Инициализация std :: string, кажется, генерирует один и тот же код независимо от того, какую инициализацию я использую (униформу, присваивание и т. Д.) - PullRequest
1 голос
/ 07 июля 2019

Я экспериментировал с 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...