Учтите следующее:
std::vector<int*> v(1, 0);
Это прекрасно компилируется с VC++10 (без предупреждений даже при максимальном уровне предупреждений). Однако он не компилируется с помощью llvm на Mac или gcc на Linux, что приводит к ошибке типа «назначение int* из несовместимого типа const int». Я не ищу решений — я знаю, что второй параметр не нужен или что static_cast исправляет ошибку.
Я думал, что ноль можно неявно преобразовать в любой тип указателя. Что дает? Я могу сделать следующее:
int* i = 0;
int* const& ii = 0;
const int t = 0;
i = t;
Я понимаю, что сигнатура конструктора векторов принимает const T&
, который при расширении для vector
становится int* const&
. ] правильный? Может ли кто-нибудь объяснить, что здесь происходит, и правильно ли компилятор VC++ или не-VC++?