函数的std :: string vs string literal

Tom*_*mas 2 c++ string stdstring string-literals

我想知道,我通常使用std :: string作为我的代码,但是当你在一个参数中传递一个字符串进行简单的比较时,最好只使用一个文字吗?

考虑这个功能:

bool Message::hasTag(string tag)
{
    for(Uint tagIndex = 0; tagIndex < m_tags.size();tagIndex++)
    {
        if(m_tags[tagIndex] == tag)
            return 0;
    }

    return 1;
}
Run Code Online (Sandbox Code Playgroud)

尽管它正在进行比较的属性是一个向量,并且无论使用这个函数可能会将字符串传递给它,使用const char*来避免创建一个新的字符串仍然会更好一个字符串文字呢?

unw*_*ind 16

如果你想使用类,这里最好的方法是const引用:

bool Message::hasTag(const string& tag);
Run Code Online (Sandbox Code Playgroud)

这样,可以最小化还原剂复制,并且清楚地表明该方法不打算修改参数.我认为一个聪明的编译器可以为这个用字符串文字调用的情况发出相当好的代码.

传递一个字符指针需要你用来strcmp()比较,因为如果你开始直接比较指针==,那就会有麻烦.

  • 无论编译器多么聪明,它都必须构造一个字符串对象. (2认同)