Чи однакові "auto const" та "const auto"?


77

Чи існує семантична різниця між auto constі const auto, або вони означають одне і те ж?


11
Це те саме, що і будь-який інший тип.
chris

Я можу надати більш точну, але легалістичну відповідь. Оскільки ви не позначили мовного юриста, наразі я припускаю, що ви не хочете так багато деталей.
Арне Фогель

@ArneVogel у вас зараз є ваш шанс :)
Ігор Скочинський

Відповіді:


109

constКласифікатор відноситься до типу до негайного зліва , якщо немає нічого вліво , то він відноситься до типу безпосередньо праворуч. Так що, це те саме.


3
Якщо нічого не залишилось, значить, це правильно (і навпаки) :-)
Seshadri R,

9
Це насправді не працює, специфікатори та кваліфікатори (які передують декларатору ) можуть відображатися в будь-якому порядку, наприклад long volatile unsigned const typedef long cvull;. Тип не знаходиться (повністю) ні ліворуч, ні праворуч від const.
Arne Vogel

1
@ArneVogel OMG, чому typedefдозволено посередині :)
4LegsDrivenCat

1
Як прокоментував @ArneVogel, відповідь є не зовсім вірною. Той факт, що це прийнята відповідь, оманливий (і, можливо, небезпечний).
wny

@ArneVogel, де я міг би прочитати більше про це, будь ласка
Krapnix

24

Надуманий приклад:

std::vector<char*> test;
const auto a = test[0];
*a = 'c';
a = 0; // does not compile
auto const b = test[1];
*b = 'c';
b = 0; // does not compile

Обидва aі bмають тип char* const. Не думайте, що ви можете просто «вставити» тип замість ключового слова auto(тут const char* a:)! constКлючове слово буде застосовуватися до всього типу , що autoматчі (тут: char*).


Const насправді не стосується char*, це стосується charчастини, а не *частини.
jbruni
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.