Каково значение ведущих подчеркиваний в конструкторе C ++?

StackOverflow https://stackoverflow.com/questions/1591217

Вопрос

ОК, я не очень опытный программист C ++, но мне было интересно, каково значение недостатков в аргументах следующего конструктора?

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;
  ...
Это было полезно?

Решение

Это просто удобное соглашение об именах, это ничего не значит для языка. Просто будьте уверены, что вы не следуете за ним с буквой в верхнем случае: Что означает двойное подчеркивание (__const) в C?

Другие советы

Ничего особенного. Он только что назвал это таким, чтобы различать переменные члена и имена параметров.

Подчеркивается действительный символ в идентификаторах C ++.

Скорее всего, автор Кодекса пытался избежать потенциального конфликта между именами членов данных и именами параметров конструктора в списке инициализатора. Скорее всего, автор не знал о том, что правила поиска C ++ убедится, что конфликт в любом случае не произойдет. Т.е. Следующий код также даст ожидаемые результаты

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;
        ...

Хотя это может оказаться запутанным для неподготовленного читателя.

Конечно, внутри тела конструктора имена параметров скрывают имена членов, что делает его необходимыми для использования this->... или квалифицированные имена для доступа к членам данных. Скорее всего, автор Кодекса также пытался избежать этого.

Это просто соглашение о переменных именованиях, которые предполагают разные люди/учреждения. Это может показаться ненужным с первого взгляда, но на самом деле очень полезно при чтении и написании кода, особенно если у вас есть параметры и переменные -члены, которые имеют одинаковое имя. Например, вы можете иметь эти три случая:

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

В приведенном выше примере:

  • _Variable - означает, что это переменная члена класса
  • variable_ - означает, что это параметр для функции
  • Переменная - означает, что это всего лишь обычная переменная, локальная для области функции

Это просто имена для параметров.

Нет особого значения - это просто соглашение, которое может использовать некоторые люди.

У них нет синтаксического значения. Однако, если у вас есть куча полей (например, x, y, width, а также height), это общее соглашение, чтобы назвать параметры конструктора, которые инициализируют их с помощью имени поля, плюс ведущее подчеркивание.

Целью этих подчеркивается различие переменной параметра float _x и переменная участника float x. Анкет Синтаксически, нет особого значения, добавленного из -за недостатков. Я лично предпочитаю префикс все параметры с a_ и префикс все переменные члена с m_ Когда мне придется кодировать C ++.

Поэтому, когда я попадаю в ситуацию, когда мне приходится смешивать и сопоставлять переменные локального, членов и параметров, я знаю, с какими из них я имею дело.

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

Потому что, если бы вы назвали Den Float X, Float Y и т. Д. Вы не можете получить доступ к фактическим полям класса, потому что у них одинаковое имя.

Это не имеет ничего общего с языком, это просто соглашение фактического программиста (я думаю, что код более очевидным)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top