C++11标准是否保证initializer_list对象的内存布局是跨编译器兼容的?

问题描述 投票:0回答:1

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++ c++11 compatibility initializer-list
1个回答
2
投票

C++ 标准明确没有强加实现细节,以允许实现以对目标硬件最有效的方式提供功能。该语言不会让您为不需要的功能付费,并且通常允许编译器做出广泛的决策来优化给定硬件上的代码大小/性能。指定特定的 ABI 可能会给编译器和编译的 C++ 程序带来不必要的负担。

© www.soinside.com 2019 - 2024. All rights reserved.