¿Cuándo usar el inicializador entre llaves?

En C ++ 11, tenemos esa nueva sintaxis para inicializar clases que nos da una gran cantidad de posibilidades sobre cómo inicializar variables.

{ // Example 1
  int b(1);
  int a{1};
  int c = 1;
  int d = {1};
}
{ // Example 2
  std::complex<double> b(3,4);
  std::complex<double> a{3,4};
  std::complex<double> c = {3,4};
  auto d = std::complex<double>(3,4);
  auto e = std::complex<double>{3,4};
}
{ // Example 3
  std::string a(3,'x');
  std::string b{3,'x'}; // oops
}
{ // Example 4
  std::function<int(int,int)> a(std::plus<int>());
  std::function<int(int,int)> b{std::plus<int>()};
}
{ // Example 5
  std::unique_ptr<int> a(new int(5));
  std::unique_ptr<int> b{new int(5)};
}
{ // Example 6
  std::locale::global(std::locale("")); // copied from 22.4.8.3
  std::locale::global(std::locale{""});
}
{ // Example 7
  std::default_random_engine a {}; // Stroustrup's FAQ
  std::default_random_engine b;
}
{ // Example 8
  duration<long> a = 5; // Stroustrup's FAQ too
  duration<long> b(5);
  duration<long> c {5};
}

Para cada variable que declaro, tengo que pensar qué sintaxis de inicialización debo usar y esto disminuye mi velocidad de codificación. Estoy seguro de que esa no era la intención de presentar los corchetes.

Cuando se trata de código de plantilla, cambiar la sintaxis puede generar diferentes significados, por lo que es esencial seguir el camino correcto.

e pregunto si hay una directriz universal que sintaxis se debe elegir.

Respuestas a la pregunta(6)

Su respuesta a la pregunta