const
позволяет определять типизированные константы.
double const pi = 3.14;
const int days[4] = {31, 28, 31, 30 };
double * pi_ptr = (double *) π
*pi_ptr = 5;
int a = 10;
const int * p1 = &a; // указатель на константу
int const * p2 = &a; // указатель на константу
*p1 = 20; // ошибка
p2 = 0; // ОК
int * const p3 = &a; // константный указатель
*p3 = 30; // ОК
p3 = 0; // ошибка
int const * const p4 = &a; // константный указатель на константу
*p4 = 40; // ошибка
p4 = 0; // ошибка
const
делает неизменяемым тип слева от него.
int a = 10;
int * p = &a;
// указатель на константный указатель на int
int * const * p2 = &p;
// константный указатель на указатель на int
int ** const p3 = &p;
int a = 10;
int & const b = a; // ошибка
int const & c = a; // ссылка на константу
Point midpoint (Segment const & s);
rvalue
.
Point p = midpoint ( Segment(Point(0,0), Point(1,1)) );
const
.
struct IntArray {
size_t size() const;
};
this
- указатель на const
) IntArray const * p = foo();
p->resize(); // error
const
является частью сигнутуры метода, метод с const
и метод без - это перегрузка функции. Константный метод вызывается по ссылке или указателю на константу, в противном случае вызывается неконстантный метод.mutable
. struct IntArray {
void foo () const {
// нарушение логической константности
data_[10] = 1;
}
}