typedef int arr[10];
arr a;
const arr const &r = a; // как это понимать? Ведь a не константа,
// меняя а получим изменение r, которой компилятор обязан гарантировать константность!!!
И второй вопрос: как объявить ссылку на массив не пользуясь typedef?
D>typedef int arr[10];
D>arr a;
D>const arr const &r = a; // как это понимать? Ведь a не константа,
D>// меняя а получим изменение r, которой компилятор обязан гарантировать константность!!!
Компилятор ы будет гарантировать константность если ти попытаешся изменить r но a не константный масив. кстати референс есть константой по своей сути поетому const перед & необязателен
Здравствуйте, Fiend, Вы писали:
F>Ссылка на массив: F>int arr[10]; F>int (&rarr)[10] = arr;
Спасибо!!!
Однако, развитие темы: константная ссылка это тавтология. Ссылка всегда "привязана" только к одному своему объекту. О чем и предупреждает таки, вопреки всему, MSVC++ 6.0 в отмеченных строках. Которые соответствуют стандарту более чем проскакивающие варианты!
int arr[10];
const int const (&rarr)[10] = arr;
const int (& const crarr)[10] = arr; //Warningtypedef int marr[12];
marr a;
const marr const &rr = a;
const marr& const r = a; //Warning
Вопрос такой: а то что проскакивает, это вообще синтаксически верные конструкции и эквивалентны ли они "правильным" описаниям, а если эквивалентны, то зачем два способа описания?
Re[3]: Но все таки...
От:
Аноним
Дата:
07.02.03 14:32
Оценка:
Знаешь, все примеры — которые "проскакивают", и на которых ворнинги — неправильные.
D>typedef int arr[10];
D>arr a;
D>const arr const &r = a; // как это понимать? Ведь a не константа,
D>// меняя а получим изменение r, которой компилятор обязан гарантировать константность!!!
D>
'r' — это не сам объект, а путь доступа к объекту. Твоя константность — это константность именно пути доступа. Она означает, что именно через этот путь доступа объект поменять нельзя (точнее, можно, но это требует специальных усилий). Компилятор не гарантирует и никогда не гарантировал, что объект не может поменяться через какие-то другие пути доступа. Да даже и с этого пути доступа константность можно снять при помощи 'const_cast' и выполнить изменение объекта (при условии, что сам объект неконстантен, как в твоем примере).
D>И второй вопрос: как объявить ссылку на массив не пользуясь typedef?