代码之家  ›  专栏  ›  技术社区  ›  Tomas

函数的字符串与字符串文字

  •  2
  • Tomas  · 技术社区  · 15 年前

    考虑这个函数:

    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*来避免创建一个像字符串文字一样使用的新字符串会更好吗?

    3 回复  |  直到 15 年前
        1
  •  16
  •   unwind    15 年前

    如果要使用类,这里最好的方法是常量引用:

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

    认为

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

        2
  •  2
  •   Frerich Raabe    15 年前

    简而言之:这要看情况。

    长话短说: std::string 非常有用,因为它为字符串提供了许多实用函数(搜索子字符串、提取子字符串、连接字符串等)。它还为您管理内存,因此不能混淆字符串的所有权。

    在你的情况下,你也不需要。你只需要知道 m_tags 匹配给定字符串。对于您的情况,使用 const char *s 完全足够了。

    然而,作为一个脚印:你几乎总是想 结束 (const) char * 当谈到 返回值 const char * 需要非常仔细地记录,解释谁拥有指向内存(调用者或被调用者),如果被调用者得到它,如何释放它( delete[] , delete , free ,其他的)。

        3
  •  1
  •   Archie    15 年前

    我认为传递一个参考而不是一个价值观就足够了 string

    bool Message::hasTag(const string& tag)
    

    那只会复制对原文的引用 一串

    m_tags 是一个字符串向量(我想), const string& 参数会更好。