gpt4 book ai didi

c++ - 显式初始化指针 vector 会导致转换错误?

转载 作者:可可西里 更新时间:2023-11-01 16:41:11 25 4
gpt4 key购买 nike

考虑一下:

std::vector<int*> v(1, 0);

这在 VC++10 上编译得很好(即使在最大警告级别也没有警告)。但是,它不会在 mac 上使用 llvm 编译,也不会在 linux 上使用 gcc 编译,会出现类似“assigning to int* from incompatible type const int”这样的错误。我不是在寻找解决方案——我知道第二个参数是不必要的,或者 static_cast 可以修复错误。

我认为零可以隐式转换为任何指针类型。是什么赋予了?我可以执行以下操作:

int* i = 0;
int* const& ii = 0;
const int t = 0;
i = t;

我知道 vector 构造函数签名采用 const T&当扩展为 vector<int*>变成 int* const&正确的?有人可以解释这里发生了什么,以及 VC++ 或非 VC++ 编译器是否正确?

最佳答案

这里看起来 g++ 实际上是错误的。参见 C++98 23.1.1/9:

For every sequence defined in this clause and in clause 21:

— the constructor template X(InputIterator f, InputIterator l, const Allocator& a = Allocator())

shall have the same effect as: X(static_cast<typename X::size_type>(f),
static_cast<typename X::value_type>(l), a)
if InputIterator is an integral type.

请注意 InputIterator是构造函数的模板参数,在本例中为 int对于您的示例,因此是一个整数类型。 g++ 库实际上有特定的代码来处理类型存储在 vector 中的所有情况。也是不可或缺的,它们都可以正常工作。在这种情况下,只是因为您使用了 0static_cast标准所规定的实际上是合法的。我尝试编译标准所说的应该等效的代码,它使用 g++ 4.5 编译。

关于c++ - 显式初始化指针 vector 会导致转换错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10017607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com