В чем разница между "const X a" и "X const a", если X является классом - PullRequest
3 голосов
/ 21 октября 2010

У меня есть имя класса X, в чем разница между "const X a" и "X const a"

Ответы [ 3 ]

13 голосов
/ 21 октября 2010

Ничего.

Квалификатор

A const применяется ко всему, что находится непосредственно слева от него. Если слева от него ничего нет, то оно применяется ко всему, что находится справа от него.

6 голосов
/ 21 октября 2010

В этом случае нет никакой разницы.

Если у вас есть указатель или ссылка, изменение, которое может выглядеть почти таким же , является значительнымхоть.Дано что-то вроде:

T * a;

Позиция const (или volatile) относительно звездочки значима:

T const * a;
T * const a;

Первыйговорит, что a является указателем на const T (т. е. вы не можете изменить объект T, на который ссылается a).Второй говорит, что a является постоянной точкой для (неконстантной) T - то есть вы можете изменить то, что a указывает на , но вы не можете изменить сам указатель,так что вы не можете указать его на другой объект.Конечно, вы также можете сделать оба:

T const * const a;

Это означает, что вы не можете изменить сам указатель или объект T, к которому он относится.

2 голосов
/ 21 октября 2010

Если вы используете простые типы (встроенные или пользовательские), то это дело вкуса.

В случае использования указателей существует простое общее правило: если const помещается перед '*', тогда данныеPoint является константой, в противном случае сам указатель является константой, вы не можете изменить его значение.

Например:

const int  a=1;  // 'a' value can't be changed
const int* q;    // the data that 'a' point to is constant
int const* q;    // the same
int* const p=&a; // the pointer is constant: const is behind '*'

so

int b=2;
p = &b; // error: trying to change constant pointer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...