Tôi hiểu rằng một con trỏ const thể được khai báo một vài cách sau:C++: Const đúng đắn và con trỏ đối số
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.
Nhưng những gì về các nguyên tắc tương tự trong bối cảnh các đối số chức năng?
tôi sẽ giả định rằng sau là không cần thiết:
void someFunc1(const int * arg);
void someFunc2(int * arg);
Kể từ someFunc 1 và 2 làm một pass-by-giá trị cho con trỏ chính nó, không thể của nó cho someFunc1 để thay đổi giá trị của con trỏ gốc, trong một cuộc gọi cụ thể cho hàm. Để minh họa:
int i = 5;
int * iPtr = &i;
someFunc1(iPtr); // The value of iPtr is copied in and thus cannot be changed by someFunc1.
Nếu điều này là đúng, thì không có điểm nào khai báo hàm có 'const int * ptr' loại arg, đúng không?
Bạn có khai báo sai vòng. "const int *" là một con trỏ có thể thay đổi thành một int không thay đổi được. "int * const" là một con trỏ không thể thay đổi thành int có thể thay đổi. –
Không, bạn có nó ngược. –
Đã chỉnh sửa câu hỏi để kích hoạt các nhân viên cứu hộ vui vẻ sẽ không bị phát hiện sai. Tôi đã để lại sai lầm để các câu trả lời vẫn có ngữ cảnh đó. – Ben