История изменений
Исправление www_linux_org_ru, (текущая версия) :
const является типом, поскольку ограничивает набор операций... Вполне логично
так же можно сказать что и ссылка является типом, поскольку ограничивает набор операций по сравнению с указателями — не дает делать инкремент, декремент и произвольные сложения-вычитания
тут конечно есть разница в том, что ссылка вводит новый синтаксис, но она не очень существенна — можно рассмотреть язык, почти эквивалентный си, у которого инкремент, декремент и произвольные сложения-вычитания производились бы не ++, - - , +=, а .increment, .decrement, .move_by, и произвольные указатели можно было бы использовать без разыменования, почти как сейчас используются указатели на функции:
int a[5]={0, 1, 2, 3, 4};
int* ptr2 = &(a[2]);
int* ptr1 = ptr2.decrement();
ptr2 = &(a[2]);
int* ptr3 = ptr2.increment();
printf("%d", ptr3+ptr1); /* печатает 4, т.е. 3+1 */
printf("%d", ptr3+1); /* тоже печатает 4, т.е. 3+1 */
printf("%d", ptr3.raw_value()); /* печатает допустим 2384098780, т.е. значение указателя как целого */
Исправление www_linux_org_ru, :
const является типом, поскольку ограничивает набор операций... Вполне логично
так же можно сказать что и ссылка является типом, поскольку ограничивает набор операций по сравнению с указателями — не дает делать инкремент, декремент и произвольные сложения-вычитания
тут конечно есть разница в том, что ссылка вводит новый синтаксис, но она не очень существенна — можно рассмотреть язык, почти эквивалентный си, у которого инкремент, декремент и произвольные сложения-вычитания производились бы не ++, - - , +=, а .increment, .decrement, .move_by, и произвольные указатели можно было бы использовать без разыменования, почти как сейчас используются указатели на функции:
int a[5]={0, 1, 2, 3, 4};
int* ptr2 = &(a[2]);
int* ptr1 = ptr2.decrement();
ptr2 = &(a[2]);
int* ptr3 = ptr2.increment();
printf("%d", ptr3+ptr1); /* печатает 4, т.е. 3+1 */
printf("%d", ptr3+1); /* тоже печатает 4, т.е. 3+1 */
printf("%d", ptr3.raw_value()); /* печатает допустим 2384098787, т.е. значение указателя как целого */
Исправление www_linux_org_ru, :
const является типом, поскольку ограничивает набор операций... Вполне логично
так же можно сказать что и ссылка является типом, поскольку ограничивает набор операций по сравнению с указателями — не дает делать инкремент, декремент и произвольные сложения-вычитания
тут конечно есть разница в том, что ссылка вводит новый синтаксис, но она не очень существенна — можно рассмотреть язык, почти эквивалентный си, у которого инкремент, декремент и произвольные сложения-вычитания производились бы не ++, - - , +=, а .increment, .decrement, .move_by, и произвольные указатели можно было бы использовать без разыменования, почти как сейчас используются указатели на функции:
int a[5]={0, 1, 2, 3, 4};
int* ptr2 = &(a[2]);
int* ptr1 = ptr2.decrement();
int* ptr3 = ptr2.increment();
printf("%d", ptr3+ptr1); /* печатает 4, т.е. 3+1 */
printf("%d", ptr3+1); /* тоже печатает 4, т.е. 3+1 */
printf("%d", ptr3.raw_value()); /* печатает допустим 2384098787, т.е. значение указателя как целого */
Исправление www_linux_org_ru, :
const является типом, поскольку ограничивает набор операций... Вполне логично
так же можно сказать что и ссылка является типом, поскольку ограничивает набор операций по сравнению с указателями — не дает делать инкремент, декремент и произвольные сложения-вычитания
тут конечно есть разница в том, что ссылка вводит новый синтаксис, но она не очень существенна — можно рассмотреть язык, почти эквивалентный си, у которого инкремент, декремент и произвольные сложения-вычитания производились бы не ++, - - , +=, а .increment, .decrement, .move_by, и произвольные указатели можно было бы использовать без разыменования, почти как сейчас используются указатели на функции:
int a[5]={0, 1, 2, 3, 4};
int* ptr2 = &(a[2]);
int* ptr1 = ptr2.decrement();
int* ptr3 = ptr2.increment();
printf("%d", ptr3+ptr1); /* печатает 4, т.е. 3+1 */
printf("%d", ptr3+1); /* тоже печатает 4, т.е. 3+1 */
printf("%d", ptr3.raw_value); /* печатает допустим 2384098787, т.е. значение указателя как целого */
Исходная версия www_linux_org_ru, :
const является типом, поскольку ограничивает набор операций... Вполне логично
так же можно сказать что и ссылка является типом, поскольку ограничивает набор операций по сравнению с указателями — не дает делать инкремент, декремент и произвольные сложения-вычитания
тут конечно есть разница в том, что ссылка вводит новый синтаксис, но она не очень существенна — можно рассмотреть язык, почти эквивалентный си, у которого инкремент, декремент и произвольные сложения-вычитания производились бы не ++, - - , +=, а .increment, .decrement, .move_by, и произвольные указатели можно было бы использовать без разыменования, почти как сейчас используются указатели на функции:
int a[5]={0, 1, 2, 3, 4};
int* ptr2 = &(a[2]);
int* ptr1 = ptr2.decrement();
int* ptr3 = ptr2.increment();
printf("%d", ptr3+ptr1); /* печатает 4, т.е. 3+1 */
printf("%d", ptr3+1); /* тоже печатает 4, т.е. 3+1 */
printf("%d", ptr3.raw_value); /* печатает значение указателя как целого */