Что происходит с
pass_by_const(const std::string& s)
{
pass_by_non_const(s);
}
является: pass_by_const
имеет константный аргумент std::string s
, поэтому не разрешается изменять строку s определено в области видимости и передал ему в качестве аргумента. Тем не менее, pass_by_non_const
разрешено изменять s. Это приводит к ошибке компилятора во время компиляции.
Однако локальная неконстантная копия s может быть передана pass_by_non_const
. Затем локальная копия может быть изменена в области pass_by_non_const
, тогда как область охвата, переданная в качестве аргумента pass_by_const
, не изменяется.
Правильный способ, чтобы написать метод затем
pass_by_const(const std::string& s)
{
std::string local_copy = s;
pass_by_non_const(local_copy);
}
не
Нет больше времени компиляции ошибки, local_copy может быть изменен в самом внутренней области видимости, в то время как с от вмещающего объема не будет, что соблюдать Pass- by-const-refness метода pass_by_const
.
Если вы компилятор разрешает это без предупреждения, я бы получил новый компилятор. VC++ позволяет передавать temps как неконстантные ссылки, но даже это предупреждается с соответствующими (и, на мой взгляд, обязательными) уровнями предупреждения. – WhozCraig
. я просто хочу найти работу. это просто удобный способ попросить разъяснений. – octoback