2016-03-05 5 views
3

Я смущен насчет квалификатора const. Я нашел и прочитал много статей и подобных вопросов, таких как http://www.cprogramming.com/reference/pointers/const_pointers.html.Определители и амперсанды

Что мне не ясно, почему g++ жалуются на этот класс члена:

const string& const name; 

но не жалуется на

string& const name; 

Моя идея заключается в том, чтобы объявить постоянный указатель на постоянное строковое значение. Я использую & вместо *, чтобы избежать NULL указателей.

Что мне не хватает?

Ошибка компилятора заключается в следующем:

‘const’ qualifiers cannot be applied to ‘const string& {aka const std::__cxx11::basic_string<char>&}’ 
    const string& const name; 
        ^
+7

«Моя идея заключается в том, чтобы объявить константный указатель ...» - '&' не объявить указатель на всех. –

+0

Возможно, компилятор говорит: «Вы сказали мне однажды, почему ....» –

+2

Вы вводите в заблуждение ссылки и указатели. Посмотрите их в индекс вашего любимого справочника C++. –

ответ

6

string& const name; должны терпеть неудачу слишком. Ссылки и указатели - это разные вещи.

Ссылка не может быть самой константой, это не имеет смысла. В отличие от указателя, ссылка не может быть связана снова после инициализации.

Неудачная демонстрация с gcc и clang.

И посмотреть What are the differences between a pointer variable and a reference variable in C++?

+0

Вы забыли рассказать ему, что ему не хватает, как разница между указателями и ссылками. –