почему cppcheck говорит «параметр функции должен передаваться по ссылке»?

Это код cppcheck show waring: «[event.cpp: 20]: (производительность) Параметр функции ‘путь’ должен передаваться по ссылке».

void
event::set_path(const std::string path)
{
this->_path = path;
}

но другой код, включая строковый параметр, не показывает это предупреждение, например:

int
watcher::init_watch(const struct stat *sb, std::string path, bool linked)
{
int wd;
....
}

Зачем?

3

Решение

Потому что это должно! Нет смысла передавать константную копию, вы все равно не можете ее изменить, так зачем копировать. В худшем случае потребуется выделить память для новой строки, а затем скопировать строку по одному байту за раз. В лучшем случае это может сделать некоторую магию подсчета внутренних ссылок, но если вы просто передали ее по ссылке, то вы, самое большее, копируете один указатель на новую точку в стеке. проходить мимо const std::string& path — Это будет намного быстрее.

Параметр пути в init_watch следует также передавать по константной ссылке, потому что это тоже сделает копию без причины.

7

Другие решения

Других решений пока нет …