C++ 标准布局如何有用?
据我所知,标准布局允许三件事:C++ 标准布局如何有用?,c++,c++11,standard-layout,C++,C++11,Standard Layout,据我所知,标准布局允许三件事: 空基类优化 使用某些指针强制转换向后兼容C 抵销权的使用 现在,库中包含了is_standard_layout谓词元函数,但我看不出它在泛型代码中有多大用处,因为我上面列出的那些C特性似乎非常罕见,需要在泛型代码中进行检查。我唯一能想到的就是在static\u assert中使用它,但这只是为了使代码更加健壮,而不是必需的 标准布局如何有用?如果没有它,有什么事情是不可能的,因此需要在标准库中使用它吗?一般回答 这是一种验证假设的方法。如果不是这样的话,您就不
- 空基类优化
- 使用某些指针强制转换向后兼容C
- 抵销权的使用
is_standard_layout
谓词元函数,但我看不出它在泛型代码中有多大用处,因为我上面列出的那些C特性似乎非常罕见,需要在泛型代码中进行检查。我唯一能想到的就是在static\u assert
中使用它,但这只是为了使代码更加健壮,而不是必需的
标准布局如何有用?如果没有它,有什么事情是不可能的,因此需要在标准库中使用它吗?一般回答
这是一种验证假设的方法。如果不是这样的话,您就不会希望编写采用标准布局的代码
C++11提供了一系列这样的实用程序。它们对于编写通用代码(模板)特别有价值,否则您必须信任客户机代码不会犯任何错误
特定于的注释是标准布局
在我看来,的(伪代码)定义大概是
// note: applied recursively to all members
bool is_pod(T) { return is_standard_layout(T) && is_trivial(T); }
因此,为了实现is\u pod
,您需要知道is\u标准布局。有鉴于此,我们不妨将is\u standard\u layout
公开为库开发人员可用的工具。还需要注意的是:如果你有一个用例<代码> iSypod ,你可能想考虑代码< > ISHistaldAdSudio在这种情况下可能是一个更好(更准确)的选择,因为POD本质上是标准布局的一个子集。
我觉得他们添加了每一种可以想象的类型评估变体,不管有什么明显的价值,只是为了防止有人在下一个标准出现之前遇到需要。我怀疑堆积在这些“额外”类型属性上是否会给编译器开发人员增加额外的负担
这里对标准布局进行了很好的讨论:
cppreference.com上也有很多很好的细节:让代码更健壮并没有错。“您不想编写采用标准布局的代码”,但哪种类型的通用代码采用标准布局?我以前使用过is\u pod
和is\u琐碎
,但从来没有使用过is\u标准布局
。