Общие значения в префиксах и суффиксах сумм массива

Несмотря на то, что у нас уже есть очень хорошие ответы на это, я решил внести более практичный ответ, чтобы показать, что может и что не может быть сделано.

Так что это не работает:

vector<const T> vec; 

Просто прочитайте другие ответы, чтобы понять, почему. И, как вы, возможно, догадались, это тоже не сработает:

vector<const shared_ptr<T>> vec;

T больше не const, но vector удерживает shared_ptr s, а не T s.

С другой стороны, это работает :

vector<const T *> vec;
vector<T const *> vec;  // the same as above

Но в этом случае const указывает объект, на который указывает, а не самого указателя (что и хранит вектор). Это было бы равнозначно:

vector<shared_ptr<const T>> vec;

Что хорошо.

Но если мы положим const в конец выражения, теперь он превращает указатель в const, поэтому следующее не будет компилироваться:

vector<T * const> vec;

Немного сбивает с толку, согласен, но вы привыкли к этому.

0
задан François Huppé 13 July 2018 в 17:53
поделиться