Com a introdução do C 11, os desenvolvedores ganharam um novo conjunto de opções de sintaxe para inicializar classes, adicionando ao já existente inicializador entre chaves. Essa infinidade de opções apresentou um dilema intrigante: quando usar cada opção de sintaxe?
A diretriz fornecida sugere que se a intenção for atribuir um valor exato a um objeto , a inicialização da cópia (=) deve ser favorecida. Isso ocorre porque minimiza o risco de invocar inadvertidamente um construtor explícito com semântica potencialmente diferente. A inicialização de chaves deve ser considerada se a inicialização de cópia não estiver disponível, e a inicialização de parênteses deve ser usada como último recurso.
A inicialização de chaves é excelente ao inicializar com vários valores destinados a ser armazenado dentro do objeto. Esta sintaxe é particularmente adequada para vetores, matrizes e números complexos.
Quando os valores fornecidos durante a inicialização descrevem o estado ou comportamento pretendido do objeto em vez de seus dados reais , a inicialização entre parênteses deve ser empregada. Esse é frequentemente o caso com argumentos que especificam tamanho ou nomes de arquivos.
Considere os seguintes trechos de código:
{ // Example 1
int b(1); // Copy initialization for exact value
int a{1}; // Brace initialization for stored value
int c = 1; // Parentheses initialization for descriptor value (e.g., size)
int d = {1}; // Brace initialization for stored value
}
{ // Example 4
std::function a(std::plus()); // Copy initialization for callback function
std::function b{std::plus()}; // Brace initialization for callback function, likely unwanted
}
Seguindo a diretriz proposta, os desenvolvedores podem navegar pelas complexidades da sintaxe do inicializador C 11 com confiança, garantindo que seu código seja preciso e eficiente.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3