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
的内存布局以实现兼容性?
答案 0 :(得分:2)
C ++标准特别没有强制实现细节,以允许实现以对目标硬件最有效的方式提供功能。该语言不会让您为不需要的功能付费,并且通常允许编译器做出广泛的决策来优化给定硬件上的大小/性能代码。指定特定的ABI可能会给编译器和编译的C ++程序带来不必要的负担。