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++ 程序带来不必要的负担。