C++11 标准是否保证initializer_list对象的内存布局与交叉编译器兼容?
Does the C++11 standard guarantee the memory layout of initializer_list's objects are cross-compiler compatible?
vc++实现std::initializer_list
如下:
template<class T>
class initializer_list
{
public:
// ...
private:
const value_type* _first;
const value_type* _last;
};
然而,clang 3.4以另一种方式实现了std::initializer_list
:
template<class T>
class initializer_list {
const T* _p;
size_t _size;
// ...
};
显然,这两个定义不是二进制兼容的。
为什么c++标准没有明确定义std::initializer_list
的内存布局兼容性?
c++标准特别没有强加实现细节,以允许实现以最有效的方式为目标硬件提供功能。该语言不会让您为不需要的功能付费,并且通常允许编译器做出广泛的决定,以根据给定硬件的大小/性能优化代码。指定特定的ABI可能会给编译器和已编译的c++程序带来不必要的负担。
相关文章:
- C/C++编译器通常会删除重复的库吗
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- Win32编译器选项和内存分配
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++,我收到一个无法理解的编译器错误
- 在线编译器中的分段C++没有打印消息
- 如何使用C/C++在MacOSX中获得键盘布局
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- C/C++预处理器是否可以检测一些编译器选项
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 我需要知道编译器如何在cpp中使用析构函数
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 编译器如何区分std::vector的构造函数
- sizeof()的大小与编译器布局开关的大小不同
- 编译器之间的浮点二进制布局
- C++11 标准是否保证initializer_list对象的内存布局与交叉编译器兼容?
- C++ 项目布局似乎不正确,编译器找不到实现文件
- 编译器构造 - C++中多个继承对象的内存布局