如何在使用非前缀成员变量时命名构造函数参数?

Mar*_* Ba 6 c++ initialization naming-conventions initializer-list

当然没有一种正确的方法可以做到这一点,但我甚至无法想到任何体面的命名方案,这就是我在这里问的原因.(所以:虽然所有答案都是主观的,但它们仍然有用!)

问题如下:对于简单的聚合结构,我们不使用成员var前缀.

struct Info {
  int x;
  string s;
  size_t z;

  Info()
  : x(-1)
  , s()
  , z(0)
  { }
};
Run Code Online (Sandbox Code Playgroud)

然而,提供初始化结构的初始化程序ctor有时是有用的,但是当参数的最自然名称已被成员变量本身占用时,我无法为参数提供合适的命名方案:

struct Info {
  int x;
  string s;
  size_t z;

  Info(int x?, string s?, size_t z?)
  : x(x?)
  , s(s?)
  , z(z?)
  { }
};
Run Code Online (Sandbox Code Playgroud)

在这种情况下,其他人使用了什么?

fiz*_*zer 12

使用相同的名称 - 它们不会发生碰撞.

"在查找构造函数(12.6.2)的mem-initializer表达式中使用的名称...期间,函数参数名称是可见的,并隐藏在包含的块,类或命名空间范围中声明的实体的名称功能声明." 3.4.1 C++ 2003


Joh*_*itb 8

为什么要发明前/后缀?我只是用同一个名字.C++旨在实现这一目标.

struct Info {
  int x;
  string s;
  size_t z;

  Info(int x, string s, size_t z)
  : x(x)
  , s(s)
  , z(z)
  { }
};
Run Code Online (Sandbox Code Playgroud)

这是直截了当的.

  • 出于同样的原因,你在布尔表达式中使用额外的括号:因为在某些情况下,大多数人(包括我)都不记得语言是如何工作的.它在阅读代码时避免了"心理速度颠簸". (3认同)
  • @Frerich,这个问题很有启发性.不像记住20+优先级规则,我看不出它有用,记住这条规则对我来说非常有用.如果您有一个空体并且只有初始化列表,则不必担心其他任何事情.不是很棒吗? (3认同)

Eri*_*rik 5

我倾向于使用"a"前缀 - 就像"无论什么"一样.

Info(int aX, string const & aS, size_t aZ);


struct Time {
  Time(time_t aUnixTime) : UnixTime(aUnixTime) {}
  time_t UnixTime;
};
Run Code Online (Sandbox Code Playgroud)