Lors de l'utilisation de l'attache-clos de l'initialiseur?

En C++11, nous avons que la nouvelle syntaxe pour initialiser les classes qui nous donne un grand nombre de possibilités pour initialiser des 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};
}

Pour chaque variable, je déclare, je pense que ce qui l'initialisation de la syntaxe à utiliser est et ce qui ralentit mon codage de la vitesse vers le bas. Je suis sûr que ce n'était pas l'intention d'introduire des accolades.

Quand il s'agit de modèle de code, la modification de la syntaxe peut conduire à des sens différents, donc nous allons la droit chemin est essentiel.

Je me demande si il y a un guide universel dont la syntaxe on doit choisir.

  • Un exemple de comportement non voulu à partir de {} initialisation: string(50, 'x') vs string{50, 'x'} ici
InformationsquelleAutor helami | 2012-04-02