Сделать в стеке const int *
:
void func(const int *&ptr)
{
std::stack<const int *> st; // <== Add const before int * here.
st.push(ptr);
}
Объяснение:
Указатель const означает: вы можете читать то, на что он указывает, но не можете писать на то, на что оно указываетуказывает на.И неконстантный указатель (то есть нормальный указатель) может читать и записывать то, на что он указывает.Компилятор всегда проверяет, что вы когда-либо ограничиваете возможности при назначении указателей.
Вы можете помещать неконстантные указатели в стек, содержащий константные указатели.Указатели в стеке всегда будут указателями констант и будут в состоянии сделать меньше , чем ваш исходный указатель.
С другой стороны, вы не можете помещать указатели констант в стек не-const указатели (это ваш случай), потому что тогда вы сможете делать больше с указателями в стеке, чем вам было разрешено ранее.
Другими словами: вы всегда можете добавить const по пути, но вы никогда не сможете (*) удалить его снова.
(*) Вы можете удалить const
, применив заклинание, но выдолжен делать это, только если вы точно знаете, что делаете.Обычно в этом нет необходимости.