"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Os membros de dados de classe podem ser inicializados diretamente em C++?

Os membros de dados de classe podem ser inicializados diretamente em C++?

Publicado em 2024-11-18
Navegar:386

Can Class Data Members Be Initialized Directly in C  ?

Os membros dos dados da classe podem ser inicializados diretamente?

Em C , os membros dos dados da classe não podem ser inicializados usando a sintaxe de inicialização direta, (), conforme visto no exemplo a seguir :

#include 

class test {
public:
    void fun() {
        int a(3);
        std::cout 

A compilação falha com erros:

11    9 [Error] expected identifier before numeric constant
11    9 [Error] expected ',' or '...' before numeric constant

Por que esse é o caso?

O padrão C proíbe explicitamente esta sintaxe para inicialização do membro de dados da classe. As primeiras propostas para a introdução do recurso citaram problemas de análise como o motivo.

Considere este exemplo ambíguo:

struct S {
    int i(x); // data member with initializer or...
    // ...
    static int x;
    int i(y); // member function declaration
    // ...
    typedef int y;
};

O padrão propõe uma solução:

Para eliminar ambiguidade, o padrão C permite apenas a seguinte sintaxe para inicialização de membros de dados de classe:

  • = cláusula inicializadora
  • { lista inicializadora }

Esta resolução garante clareza e evita o potencial de mal-entendidos nos casos em que uma declaração pode se parecer tanto com um objeto quanto com uma função declaração.

Tutorial mais recente Mais>

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