我想知道,我通常会使用std ::字符串作为我的代码,但是当您将字符串传递给参数以进行简单比较时,只使用字面意思是更好吗?

考虑此功能:

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

    return 1;
}

尽管它与之比较的属性是向量,而无论使用该功能的任何用途都可能传递到它,但使用const char*还是最好的选择,以避免创建像使用一样的新字符串无论如何,字符串字面意思?

有帮助吗?

解决方案

如果要使用类,最好的方法是const参考:

bool Message::hasTag(const string& tag);

这样,可以最大程度地减少固定复制,并且明确表明该方法不打算修改参数。一世 思考 聪明的编译器可以在带有字符串文字的情况下为情况发出非常好的代码。

传递角色指针需要您使用 strcmp() 要比较,因为如果您开始直接使用指针 ==, ,会有……麻烦。

其他提示

简短答案:这取决于。

长答案: std::string 之所以有用,是因为它为字符串提供了许多实用程序功能(寻找子字符串,提取子字符串,串联字符串等)。它还为您管理内存,因此无法混淆字符串的所有权。

就您而言,您也不需要。您只需要知道是否有任何对象 m_tags 匹配给定的字符串。因此,对于您的情况,请使用 const char *s 完全足够。

但是,如脚注意:您几乎总是想喜欢 std::string 超过 (const) char * 在谈论时 返回值. 。那是因为c字符串根本没有所有权语义,因此返回的功能 const char * 需要非常仔细地记录下来,解释谁拥有对内存(呼叫者或callee)的指向,如果Callee获取它,请如何释放它(delete[], delete, free, ,其他)。

我认为通过参考而不是价值是足够的 string. 。我是说:

bool Message::hasTag(const string& tag)

那将仅复制对原始的引用 string 价值。无论如何,必须在功能之外创建。此功能不会复制其参数。

自从 m_tags 无论如何是字符串的向量(我想), const string& 参数是更好的主意。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top