为什么cppcheck说"函数参数应该通过引用传递"?

fay*_*ewu 3 c++ cppcheck

这是cppcheck show waring的代码"[event.cpp:20] :(性能)函数参数'path'应该通过引用传递."

void
event::set_path(const std::string path)
{
    this->_path = path;
}
Run Code Online (Sandbox Code Playgroud)

但其他代码包括字符串paramer不显示此警告,如:

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

为什么?

Sal*_*gar 7

因为它应该!没有理由传递const副本,无论如何都无法修改它,所以为什么要复制它.在最坏的情况下,它必须为一个全新的字符串分配内存,然后一次一个字节地复制字符串.在最好的情况下,它可能会执行一些内部引用计数魔术,但如果您只是通过引用传递它,那么您最多只能复制一个指向堆栈中新点的指针.路过const std::string& path- 它会快得多.

path参数也init_watch应该通过const引用传入,因为它也会无缘无故地复制.

  • 我不能同意第二个论点.你确定`init_path`中没有修改`path`吗?如果是,则可以在调用时进行复制. (3认同)