C++: Корректность Const и аргументы указателей

Я понимаю, что указатель const может быть объявлен несколькими способами:

const int * intPtr1; // Declares a pointer that cannot be changed.
int * const intPtr2; // Declares a pointer whose contents cannot be changed.

// EDIT: THE ABOVE CLAIMS ARE INCORRECT, PLEASE READ THE ANSWERS.

Но как насчет тех же принципов в контексте аргументов функции?

Я бы предположил, что следующее является избыточным:

void someFunc1(const int * arg);
void someFunc2(int * arg);

Поскольку someFunc 1 и 2 делают pass-by-value для самого указателя, невозможно для someFunc1 изменить значение исходного указателя при данном вызове функции. Проиллюстрируем:

int i = 5;
int * iPtr = &i;

someFunc1(iPtr); // The value of iPtr is copied in and thus cannot be changed by someFunc1.

Если это так, то нет смысла объявлять функцию с аргументом типа 'const int * ptr', верно?

21
задан Ben 10 January 2012 в 19:40
поделиться