Pub*_*bby 12 c++ standard-layout c++11
据我所知,标准布局允许三件事:
现在,包含在库中的是is_standard_layout谓词元函数,但我在通用代码中看不到它的用处,因为我上面列出的那些C特性似乎极少需要检查通用代码.我唯一能想到的是在里面使用它static_assert,但这只是为了使代码更健壮而且不是必需的.
怎么is_standard_layout有用?有没有没有它的东西是不可能的,因此需要它在标准库中?
这是一种验证假设的方法。如果不是这种情况,您不会想编写假定标准布局的代码。
C++11 提供了一堆这样的实用程序。它们对于编写通用代码(模板)特别有价值,否则您必须相信客户端代码不会出错。
is_standard_layout在我看来, 的(伪代码)定义is_pod大致是......
// note: applied recursively to all members
bool is_pod(T) { return is_standard_layout(T) && is_trivial(T); }
Run Code Online (Sandbox Code Playgroud)
因此,您需要了解is_standard_layout才能实施is_pod. 鉴于此,我们不妨公开is_standard_layout一个可供库开发人员使用的工具。另请注意:如果您有 的用例is_pod,您可能需要考虑is_standard_layout在这种情况下实际上可能是更好(更准确)选择的可能性,因为 POD 本质上是标准布局的一个子集。
我觉得他们添加了所有可以想象的类型评估变体,不管任何明显的价值,以防万一有人可能在下一个标准出现之前的某个时候遇到需求。我怀疑堆积在这些“额外”类型的属性上是否会给编译器开发人员增加额外的负担。
这里有一个关于标准布局的很好的讨论:为什么 C++11 的 POD“标准布局”定义是这样的? cppreference.com 上也有很多很好的细节:非静态数据成员
| 归档时间: |
|
| 查看次数: |
1223 次 |
| 最近记录: |