【发布时间】:2020-06-11 15:33:48
【问题描述】:
如果我有一个由 3 个双精度组成的类对象; x、y 和 z,有没有办法在函数中循环它们?
例如
for(i in (x,y,z))
do something;
我可以通过显式转换来做类似的事情,但我想知道是否有更优雅的解决方案。
class testc {
public:
double x, y, z;
testc(double x, double y, double z)
:x(x), y(y), z(z)
{}
};
int main()
{
testc omega(1, 2, 3);
cout << *(double*)&omega << " " << *((double*)&omega +1) << " " << *((double*)&omega +2);
}
【问题讨论】:
-
你的成员总是有相同的类型吗?
-
我认为
*((double*)&omega +1)(你忘了括号)是一个严格的别名违规和UB,它需要是*(double *)((char*)&omega + sizeof(double))。 -
从技术上讲,您可以拥有
for (auto el : { omega.x, omega.y, omega.z }) {// your code}。使用向量或数组容器可能会更好。 -
抱歉看到这个关闭了,我只是使用基于范围的循环初始化语句 (C++20) 编写答案,允许我们使用结构化绑定作为 init 语句:
for(auto [x, y, z] = omega; auto e : {x, y, z}) { std::cout << e << " "; }(给予或接受一些autoconstness)。 -
@dfri:我重新打开了它。我的回答很弱。放置一个占位符以阻止欺骗警察!
标签: c++