【发布时间】:2012-04-04 19:03:42
【问题描述】:
考虑一下:
std::vector<int*> v(1, 0);
这在 VC++10 上编译得很好(即使在最大警告级别也没有警告)。但是,它不能在 mac 上使用 llvm 或在 linux 上使用 gcc 进行编译,从而出现类似“从不兼容的类型 const int 分配给 int*”之类的错误。我不是在寻找解决方案——我知道第二个参数是不必要的,或者 static_cast 修复了错误。
我认为零可以隐式转换为任何指针类型。是什么赋予了?我可以做到以下几点:
int* i = 0;
int* const& ii = 0;
const int t = 0;
i = t;
我知道向量构造函数签名采用const T&,当扩展为vector<int*> 时变为int* const& 对吗?有人能解释一下这里发生了什么,VC++ 还是非 VC++ 编译器是否正确?
【问题讨论】:
-
尝试
nullptr而不是0。 -
你是编译成 C++03 还是 C++11 程序?
-
与问题无关,但是,为什么Bjarne said we should avoid them 时使用原始指针?
-
这在我看来像是一个编译器错误。
-
谢谢大家——这就是我喜欢 stackoverflow 的原因。这是一个涉及移植遗留代码的学术问题,我已经找到了解决方案。我非常了解现代 c++ 在内存管理方面的使用,但感谢您的娱乐性和毫无意义的玩笑。
标签: c++ visual-c++