$ 9.3.1/3 states-
"Một hàm thành viên không tĩnh có thể được khai báo const, không ổn định, hoặc const không ổn định. Những cvqualifiers ảnh hưởng đến kiểu của con trỏ này (9.3.2). Họ cũng ảnh hưởng đến Hàm chức năng (8.3.5) của hàm thành viên, hàm thành viên khai báo const là hàm thành viên const, hàm thành viên được khai báo dễ bay hơi là hàm thành viên dễ bay hơi và hàm thành viên khai báo const volatile là hàm thành phần biến đổi const. "
Vì vậy, đây là tóm tắt:
a) Một vòng loại const có thể chỉ được sử dụng cho các chức năng lớp không tĩnh thành viên
b) trình độ cv cho chức năng tham gia vào quá tải
struct X{
int x;
void f() const{
cout << typeid(this).name();
// this->x = 2; // error
}
void f(){
cout << typeid(this).name();
this->x = 2; // ok
}
};
int main(){
X x;
x.f(); // Calls non const version as const qualification is required
// to match parameter to argument for the const version
X const xc;
xc.f(); // Calls const version as this is an exact match (identity
// conversion)
}
+ 1 để tham khảo quy phạm! –