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)
我想知道编译器是否会发现引用是不必要的,或者它是否会保留结构中的指针.
另外,有没有更好的方法为一个成员拥有两个名字?
我想知道编译器是否会发现引用是不必要的,或者是否会将指针保留在结构中。
在 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
弥补了对该指针的取消引用。
不过我不会担心它,而是会关心风格。让两个成员负责同一件事……似乎是错误的。
归档时间: |
|
查看次数: |
101 次 |
最近记录: |