在C ++构造函数中引导下划线的含义是什么?

问题描述 投票:6回答:8

好吧我不是一个非常有经验的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;
  ...
c++ syntax constructor arguments identifier
8个回答
8
投票

它只是一个方便的命名约定,它对语言没有任何意义。请确保不要使用大写字母:What does double underscore ( __const) mean in C?


9
投票

没什么特别的。他只是将其命名为区分成员变量和参数名称。

Underscore是C ++标识符中的有效字符。


8
投票

最有可能的是,代码的作者试图避免初始化列表中数据成员名称和构造函数参数名称之间的潜在冲突。很可能,作者并不知道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->...或限定名称来访问数据成员。机会的作者可能也试图避免这种情况。


2
投票

这些只是不同人/机构所假设的变量命名惯例。这看起来似乎没必要,但在读取和编写代码时实际上非常有用,尤其是当您拥有具有相同名称的参数和成员变量时。例如。你通常可以有这三种情况:

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

在上面的例子中:

  • _variable - 表示这是一个类成员变量
  • variable_ - 表示这是函数的参数
  • 变量 - 表示这只是函数作用域本地的常规变量

1
投票

它们只是传入参数的名称。它们碰巧匹配成员变量并用于初始化器。

没有特别的意义 - 这只是一些人可能会使用的惯例。


0
投票

它们没有句法意义。但是,如果你有一堆字段(例如xywidthheight),那么命名构造函数参数是一种常见的约定,这些参数使用字段名称加上前导下划线来初始化它们。


0
投票

这些下划线的目的是区分参数变量float _x和成员变量float x。从语法上讲,由于下划线,没有添加特殊含义。我个人更喜欢使用a_为所有参数添加前缀,并在我必须编写C ++代码时使用m_为所有成员变量添加前缀。

因此,当我遇到需要混合和匹配局部,成员和参数变量的情况时,我知道我正在处理哪些变量。

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

0
投票

因为如果你要命名den float x,float y等,你就无法访问该类的实际字段,因为它们具有相同的名称。

它与语言无关,它只是实际程序员的一种约定(为了使代码更明显,我认为)

© www.soinside.com 2019 - 2024. All rights reserved.