Нет, это плохая практика, так как состав не имеет никакого эффекта;std::string
может быть создан из char *
с неявным конструктором, так что вы можете удалить приведение, и вы получите точно такой же код (только с неявной конструкцией вместо явного приведения).
Теперь, как написано, вы получите ошибку (по крайней мере, с неработающим компилятором), поскольку вы не можете передать временный объект в неконстантную ссылку на lvalue.Но если вы измените функцию на const std::string &
, она будет работать просто отлично.
Также плохая практика - возвращать char *
, который вы получаете, вызывая std :: string :: c_str () - этоУказатель будет действителен только до тех пор, пока строковый объект не будет изменен или уничтожен - поэтому возвращаемый указатель станет недействительным (зависшим), как только временная переменная, переданная вами в качестве аргумента, будет уничтожена.Если вы сохраните этот возвращенный указатель в локальной переменной в main, а затем попытаетесь что-то с ним сделать (например, распечатать его), это будет неопределенным поведением.