Pergunta

OK, não sou um programador C++ muito experiente, mas queria saber qual é o significado dos sublinhados nos argumentos do seguinte construtor?

class floatCoords
 {
 public:
  floatCoords(float _x, float _y, float _width, float _height)
   : x(_x), y(_y), width(_width), height(_height)
  {

  }
  float x, y, width, height;
  ...
Foi útil?

Solução

É apenas uma convenção de nomeação, não significa nada para o idioma. Apenas certifique-se de não segui-lo com uma carta de caso superior: O que significa sublinhamento duplo (__const) em c?

Outras dicas

Nada especial.Ele apenas nomeou assim para distinguir entre as variáveis ​​de membro e os nomes dos parâmetros.

Sublinhado é um caractere válido em identificadores C++.

Provavelmente, o autor do código estava tentando evitar o potencial conflito entre os nomes dos membros de dados e os nomes dos parâmetros do construtor na lista de inicializadores. Provavelmente, o autor não estava ciente do fato de que as regras de pesquisa do C ++ garantem que o conflito não ocorra de qualquer maneira. Ou seja, o seguinte código também produzirá resultados esperados

class floatCoords    {
    public:
        floatCoords(float x, float y, float width, float height)
                : x(x), y(y), width(width), height(height)
        {
        }
        float x, y, width, height;
        ...

Embora possa ser confuso para um leitor despreparado.

Obviamente, dentro do corpo do construtor, os nomes de parâmetros ocultarão os nomes dos membros, tornando necessário usar this->... ou nomes qualificados para acessar os membros dos dados. As chances são o autor do código estava tentando evitar isso também.

Estas são apenas convenções de nomenclatura de variáveis ​​​​que diferentes pessoas/instituições assumem.Isso pode parecer desnecessário à primeira vista, mas na verdade é muito útil ao ler e escrever código, especialmente quando você tem parâmetros e variáveis-membro com o mesmo nome.Por exemplo.você normalmente pode ter estes três casos:

class A {
  void foo(int age_) { //parameter
    int age = 18; //local scope
    if (age_ > age) cout << legal << endl;
  }
  int _age; //member
};

No exemplo acima:

  • _variable - significa que esta é uma variável de membro da classe
  • variável_ - significa que este é um parâmetro para uma função
  • variável - significa que esta é apenas uma variável regular local para o escopo da função

Eles são apenas nomes para parâmetros passados.Acontece que eles correspondem a variáveis ​​de membro e são usados ​​para inicializadores.

Não há nenhum significado especial – é apenas uma convenção que algumas pessoas podem usar.

Eles não têm um significado sintático. No entanto, se você tem um monte de campos (por exemplo x, y, width, e height), é uma convenção comum nomear os parâmetros do construtor que os inicializam com o nome do campo, além de um sublinhado líder.

O objetivo desses sublinhados é distinguir a variável do parâmetro float _x e a variável membro float x.Sintaticamente, não há nenhum significado especial adicionado devido aos sublinhados.Eu pessoalmente prefiro prefixar todos os parâmetros com a_ e prefixe todas as variáveis ​​de membro com m_ quando preciso codificar C++.

Portanto, quando entro em uma situação em que preciso misturar e combinar variáveis ​​locais, de membro e de parâmetro, sei com quais estou lidando.

int y = a_x * 2;
m_x = y + 3;

Porque se você nomear den float x, flutuar y etc., você não poderá acessar os campos reais da classe porque eles têm o mesmo nome.

Não tem nada a ver com o idioma, é apenas uma convenção do programador real (para tornar o código mais óbvio, eu acho)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top