类引用成员指向同一类中的其他成员

Joe*_*Joe 5 c++ reference compiler-optimization

我正在制作一个涉及三维坐标的图书馆,并发现三维角度的组成部分有两个名称:偏航 - 俯仰 - 滚动和航向 - 高程 - 银行

所以我做了以下(在c ++ 11中完成):

struct Angle {
    float heading;
    float elevation;
    float bank;
    float &yaw = heading;
    float &pitch = elevation;
    float &roll = bank;

     // Some Constructors (copy and assignment have to be made manually)
 }
Run Code Online (Sandbox Code Playgroud)

这有利于保持两个名称方案之间的符号相当.例如:

Angle angle;
rotate(angle.yaw); // this is equivalent to rotate(angle.heading)
Run Code Online (Sandbox Code Playgroud)

我想知道编译器是否会发现引用是不必要的,或者它是否会保留结构中的指针.

另外,有没有更好的方法为一个成员拥有两个名字?

Luc*_*ore 2

我想知道编译器是否会发现引用是不必要的,或者是否会将指针保留在结构中。

在 99.9% 的情况下,指针将保留在结构中。我没有看到编译器通过翻译单元排除它们的方法。特别是因为您的语法无效,并且您必须初始化构造函数中的引用,这很可能被隐藏。因此它无法知道哪个引用引用了哪个成员。

也可能会有一些性能开销。例如:

  float x = a.elevation;
013F13E0  fld         dword ptr [ebp-18h] 
013F13E3  fstp        dword ptr [x] 
  float y = a.pitch;
013F13E6  mov         eax,dword ptr [ebp-0Ch] 
013F13E9  fld         dword ptr [eax] 
013F13EB  fstp        dword ptr [y] 
Run Code Online (Sandbox Code Playgroud)

事实上,在内部,引用就像指针一样。因此,额外的内容mov弥补了对该指针的取消引用。

不过我不会担心它,而是会关心风格。让两个成员负责同一件事……似乎是错误的。