在c+中使用哪一个字符串类来实现高性能和简单+; 我在C++中构建了一个简单的框架,我听到很多STD::String类在关键性能情况下不好,我知道在RealOrthor中移动的构造函数在C++ 11中固定的返回拷贝问题。

在c+中使用哪一个字符串类来实现高性能和简单+; 我在C++中构建了一个简单的框架,我听到很多STD::String类在关键性能情况下不好,我知道在RealOrthor中移动的构造函数在C++ 11中固定的返回拷贝问题。,c++,string,performance,C++,String,Performance,C++11解决了这个问题吗??如果是的话,那么为什么会有关于string_ref的提案 是否建议使用std::string而不是任何其他字符串 同样,那些习惯于处理C#的用户使用std::string的简单性非常困难,我决定为我的string提供类似.NET中System::string的方法(我指的是相同的名称,相同的场景,因为我知道std和STL提供了我需要的所有功能)如果字符串的性能很好,那么将其包装到提供所需功能的自定义类中的想法有多糟糕?例如: //对于我所说的将std::stri

C++11解决了这个问题吗??如果是的话,那么为什么会有关于string_ref的提案

  • 是否建议使用std::string而不是任何其他字符串

  • 同样,那些习惯于处理C#的用户使用std::string的简单性非常困难,我决定为我的string提供类似.NET中System::string的方法(我指的是相同的名称,相同的场景,因为我知道std和STL提供了我需要的所有功能)如果字符串的性能很好,那么将其包装到提供所需功能的自定义类中的想法有多糟糕?例如:
  • //对于我所说的将std::string包装在自定义字符串中的意思,这是一个简单的说明
    类自定义字符串
    {
    公众:
    CustomString()//:str(nullptr)//共享\u ptr将初始化为零
    {
    }
    自定义字符串(常量字符*str)
    {
    str=使_共享(str);
    }
    uint32\u t索引of(字符c)
    {
    //在str->find(。。。
    }
    uint32_t IndexOf(const char*ofStr)
    {
    //在str->find(。。。
    }
    uint32_t IndexOf(常量CustomString和ofStr)
    {
    //在str->find(。。。
    }
    CustomString子字符串(uint32\u t start=0,uint32\u t length=-1)
    {
    //在str->substr(。。。
    }
    CustomString LastIndexOf(常量CustonString&str)
    {
    //在str->rfind(。。。
    }
    //............
    //.......
    //..完成所有其他需要的功能
    //。添加的中间方法调用是否会对性能产生显著影响
    私人:
    共享ptr str;
    };
    
    要回答您的一个问题:

    是否建议使用
    std::string
    而不是任何其他字符串

    是的。如果其他人想使用您的框架,那么如果您使用
    std::string
    ,他们就不必担心学习使用新的string类。而且大多数情况下,
    std::string
    的性能非常令人满意

    编辑:

    <>你不想使用<代码> STD::String 是想通过一个字符串来查看其他代码,但不是触摸。注意,C++中的字符串不同于.NET中的字符串,是可变的。因此,C++中的“代码> STD::字符串< /代码> s在C++中更昂贵(因为拷贝),因此您希望使用
    const std::string&


    另一个您不想使用std::string的时候是当您想编写一个接受字符串文本的函数时(即,您需要一个可以查看但不能编辑的硬编码字符串)为此,您希望使用<代码> const char */COD>。这是尽可能高效的。另外,另一个C++程序,查看代码并查看<代码> const char */Cuff>会立即想到“字符串文字”。这使得代码更加不言自明。

    你必须测量这些东西,看看它们是否有区别。换句话说,如果你没有测量,那么你就不应该担心。这闻起来很像是过早的优化。你确定你需要另一个字符串类吗?@juanchopanza:我没有测量过,但在这个ar中有人测量过ticle he通过应用不同的操作对不同类型的字符串进行了一些测量和比较。@JustSid:在做你想做的事情之前,询问经验丰富的人是不错的。正如我在前面的评论中提到的,有一个链接可以进行一些比较,我想确保我走的是正确的道路,但是关于e在另一个类中包装std::string的第三点。@AlanStokes:效率的提高是因为它根本没有做
    std::string
    所做的事情。它包装了一个
    const char*
    ,并允许您在不复制的情况下从中提取子字符串。它会有一个非常具体的用例,而
    >std::string
    是一个通用工具。问题的第三部分如何,将std::string包装在一个新的自定义类中,为开发人员提供一个简单的接口,例如,用户将调用IndexOf方法,该方法将调用string成员中的find方法,这个主意好吗?我在答案中添加了一些代码,以使其更简单我很清楚我的意思
    //this is a simple scratch for what I meant by wrapping std::string inside a custom string
    class CustomString
    {
    public:
        CustomString()// : str(nullptr) //shared_ptr will initialize to zero
        {
        }
    
        CustomString(const char* str)
        {
            str = make_shared<std::string>(str);
        }
    
        uint32_t IndexOf(char c)
        {
            //call the appropriate methods in the str->find(...
        }
    
        uint32_t IndexOf(const char* ofStr)
        {
            //call the appropriate methods in the str->find(...
        }
    
        uint32_t IndexOf(const CustomString& ofStr)
        {
            //call the appropriate methods in the str->find(...
        }
    
        CustomString SubString(uint32_t start = 0, uint32_t length = -1)
        {
            //call the appropriate methods in the str->substr(...
        }
    
        CustomString LastIndexOf(const CustonString& str)
        {
            //call the appropriate methods in the str->rfind(...
        }
        //............
        //.......
        //..complete all other needed functionality
        //.does the added in-between method call will have a noticeable  effect on the performance 
    private:
        shared_ptr<std::string> str;
    
    };