2013-10-06 5 views
1

Рассмотрим следующий код:C++ не может преобразовать из 'междунар **' до 'сопзЬ INT **'

int** a; 
const int** b; 
b = a; 

Этот код выдает ошибку:

error C2440: '=' : cannot convert from 'int **' to 'const int **' 
Conversion loses qualifiers 

Почему я не в состоянии выполнить бросок?

При работе с простыми указателями он работает нормально.

int* a; 
const int* b; 
b = a; 
+1

Я думаю, что это не должно быть возможным. – JSQuareD

+0

Что сделало 'const' в вашем первом случае внутренним' int', эта константа не может быть отброшена в задании. –

+0

http://c-faq.com/ansi/constmismatch.html – P0W

ответ

3

Предположим, что вы смогли выполнить этот актерский состав. Рассмотрим:

const int n = 42; 
const int* cp = &n; 

int* p; 
int** a = &p; 

const int** b; 
b = a; // hypothetical, doesn't compile 
*b = cp; // equivalent to p = cp; 
*p = 84; // equivalent to n = 84: oops 

Таким образом, позволяя неявное приведение от int** к const int** позволит программе нарушать константный правильность.

Смежные вопросы