Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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++ 为什么大多数pair don';默认情况下是否不使用压缩(空基优化)?_C++_Optimization_Boost_Std Pair - Fatal编程技术网

C++ 为什么大多数pair don';默认情况下是否不使用压缩(空基优化)?

C++ 为什么大多数pair don';默认情况下是否不使用压缩(空基优化)?,c++,optimization,boost,std-pair,C++,Optimization,Boost,Std Pair,我已经检查过了,而且,他们所有的对都是琐碎的,没有ebco。但它们都实现了自己的功能,并在实用程序中使用它 既然ebco很有用,为什么它们的对在默认情况下不压缩呢?此优化是否有任何折衷?的实现不能使用(EBO),因为它包含的对象是成员子对象、第一个和第二个,并且EBO仅适用于基类子对象 请注意,的实现可以使用EBO,因为其子对象通过公开,这允许使用基类子对象。Joseph Thomson回答了这个问题 我想补充一点,如果性能很重要,std::pair和std::tuple不是您的朋友。这些类定义

我已经检查过了,而且,他们所有的对都是琐碎的,没有ebco。但它们都实现了自己的功能,并在实用程序中使用它

既然ebco很有用,为什么它们的对在默认情况下不压缩呢?此优化是否有任何折衷?

的实现不能使用(EBO),因为它包含的对象是成员子对象、
第一个和
第二个,并且EBO仅适用于基类子对象


请注意,的实现可以使用EBO,因为其子对象通过公开,这允许使用基类子对象。

Joseph Thomson回答了这个问题

我想补充一点,如果性能很重要,
std::pair
std::tuple
不是您的朋友。这些类定义了构造函数和赋值,使它们成为非平凡/非POD类,即使它们包含平凡/POD成员,这就排除了标准库中平凡/POD类的所有优化


如果可能,请定义一个无构造函数或赋值的
struct
,以获得最佳性能。这也允许人类可读的名字。是你最好的表演朋友。

有趣的问题。你能提供一些代码来说明你的意思吗?我甚至不明白EBCO是如何相关的。你将如何实现一个使用EBO的符合标准的对?请注意,压缩的_对具有不同的API。现在我们有了元组。如果不是ABI兼容,则实现可以使用C++中的< > > [[UnjyQual] ] /Cudio>。<代码> Boo::压缩<:对:第一个<代码>是一个函数,而不是在<代码> STD::配对< /代码>中的数据。尽管C++ 14代码:STD::配对< /C>有20个构造函数,但它应该是简单的。它最初是用来方便地编写包含两个元素的
struct