#include <iostream>
template<std::size_t D>
struct FakeNest
{
int & get() noexcept { return all_[0]; }
FakeNest<D-1> &sub() noexcept { return *reinterpret_cast<FakeNest<D-1> *>(&all_[1]); }
private: int all_[D];
};
int main()
{
FakeNest<4> a;
a.sub().sub().get() = 666;
std::cout << *(&a.get() + 2) << std::endl;
}
结果是符合预期的,但总觉得这种写法有点太作弊了,算不算 UB 呢?
几个可能相关的 topic 是:
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.