Преобразование из T**
в T const**
не так интуитивно понятно, как вы могли бы ожидать - на самом деле, оно приведено в качестве примера в самом стандарте как const
-неверный код.
В приведенном примереis:
#include <cassert>
int main() {
char* p = 0;
//char const** a = &p; // not allowed, but let's pretend it is
char const** a = (char const**)&p; // instead force the cast to compile
char const* orig = "original";
*a = orig; // type of *a is char const*, which is the type of orig, this is allowed
assert(p == orig); // oops! char* points to a char const*
}
Изучите вышеописанный сценарий на некоторое время, и станет ясно, что это не то же самое, что преобразование T*
→ T const*
.Совсем нет!
Я задал тот же вопрос в сообщении в блоге , а в FAQ есть запись .