Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 标准布局如何有用?_C++_C++11_Standard Layout - Fatal编程技术网

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标准布局