Я изучаю С++. В моем курсе объясняется, что лучше всего разместить const
сразу после того, что вы хотите сделать неизменным, потому что это работает const
.
Многие люди, в том числе, например, сам Бьярн Страуструп, любят писать const
впереди. Но это иногда приводит к проблемам:
const int *foo; //modifiable pointer to a constant int.
int const *bar; //constant pointer to a modifiable int? No! It a modifiable pointer to a constant int. (So the same type as foo)
Пример, который показывает это в действии:
int fun(int const *mypointer)
{
*mypointer = 5; //Won't compile, because constant int.
mypointer = 0; // Is okay, because modifiable pointer.
}
Что еще более сбивает с толку, так это то, что компиляторы, такие как g++, переписывают int const bar
в const int bar
в свои сообщения об ошибках.
Теперь это поведение меня очень сбивает с толку. Почему const
работает таким образом? Казалось бы, гораздо легче понять, будет ли это "работать" над тем, что было после него.