考虑一下:
std::vector<int*> v(1, 0);
这与 VC++10 编译得很好(即使在最大警告级别也没有警告)。但是,它不能在 mac 上使用 llvm 或在 linux 上使用 gcc 进行编译,从而出现类似“assigning to int* from in compatible type const int”之类的错误。我不是在寻找解决方案——我知道第二个参数是不必要的,或者 static_cast 修复了错误。
我认为零可以隐式转换为任何指针类型。是什么赋予了?我可以执行以下操作:
int* i = 0;
int* const& ii = 0;
const int t = 0;
i = t;
我知道向量构造函数签名const T&
在扩展为正确vector<int*>
时采用哪个?int* const&
有人可以解释这里发生了什么,以及 VC++ 或非 VC++ 编译器是否正确?