Pular para o conteúdo principal

C++0x vai mudar sua vida: listas de inicialização

Com a nova sintaxe para listas de inicialização, é como se agora houvesse uma notação para o valor literal de praticamente qualquer estrutura de dados.

Observe meu teste de unidade construindo um "attribute template" PKCS #11 com std::vector direto na inicialização:

std::vector attributes
{
  CK_ATTRIBUTE { CKA_CLASS, &object_class, sizeof(object_class) },
  CK_ATTRIBUTE { CKA_TOKEN, &on_token, sizeof(on_token) },
  CK_ATTRIBUTE { CKA_LABEL, &label, sizeof(label) },
  CK_ATTRIBUTE { CKA_APPLICATION, &application, sizeof(application) },
  CK_ATTRIBUTE { CKA_VALUE, &data, sizeof(data) }
};

O segredo da notação está nessa pseudo-gramática:

  type-name identifier { initializer-list };

que é análoga em significado a:

  type-name identifier ( argument-list );

ou:

  type-name identifier = type-name ( argument-list );

Comentários

Postagens mais visitadas deste blog

return void();

É uma pequeneza mas eu gostaria muito que as linguagens da família do C permitissem retornar void quando a função retorna void . Escrever da forma a seguir me aborrece. public class Foo  {    public void log (String msg) { }    public void bar (String x, String y) { }    public void bar (String x)    {      if (x == null)      {        log("x was null");        return;      }      bar(x, "default");    } } Eu ficaria mais feliz escrevendo assim: public class Foo  {    public void log (String msg) { }    public void bar (String x, String y) { }    public void bar (String x)    {      if (x == null) return log("x was null");      bar(x, "default");     } }

Por que goto é considerado prejudicial?

Recentemente, o Fabiano Vasconcelos abriu uma discussão no Grupo de Usuários de C e C++: De cara eu vi algo aqui um pouco estranho, se que o amigo Márcio me permite comentar: que muitos programadores, inclusive eu (se que posso ser rotulado como programador) foram instruídos com o princípio de NUNCA usar o goto, por ser considerado um mau estilo de programação. Durante a discussão, o Eduardo Vieira puxou um artigo da KernelTrap sobre uma discussão similar ocorrida no grupo de desenvolvimento do Linux, onde Robert Wilken disse o seguinte: In general, if you can structure your code properly, you should never need a goto, and if you don't need a goto you shouldn't use it. It's just "common sense" as I've always been taught. Unless you're intentionally trying to write code that's harder for others to read. É preciso colocar a máxima "goto considered harmful" na perspectiva histórica adequada. Acredito que praticamente todo programador trein...