C++ std::string是否使用字符串插入?

C++ std::string是否使用字符串插入?,c++,C++,我对windows特别感兴趣,明哥 谢谢 更新: 首先,我认为每个人都熟悉弦乐实习。 第二,我的问题很详细: 我上了一堂弦乐课练习。没什么奇怪的,我只是把大小和字符*存储在一个类中 我用memcpy做作业 当我这样做来测量std::string和我的string类的赋值速度时: string test1 = " 65 kb text ", test2; for(int i=0; i<1000000; i++) { test2 = test1; } mystring

我对windows特别感兴趣,明哥

谢谢

更新: 首先,我认为每个人都熟悉弦乐实习。

第二,我的问题很详细: 我上了一堂弦乐课练习。没什么奇怪的,我只是把大小和字符*存储在一个类中

我用memcpy做作业

当我这样做来测量std::string和我的string类的赋值速度时:

string test1 = "  65 kb text ", test2;
for(int i=0; i<1000000; i++)
   {
   test2 = test1;
   }

mystring test3 = "65 kb text", test4;
for (int i=0; i<1000000; i++)
   {
   test4 = test3
   }
stringtest1=“65kb文本”,test2;

对于(int i=0;i不,STL中没有字符串的插入。它不适合C++设计哲学,具有这样的特性。

< P>不,STL中没有字符串的插入。它不适合C++设计哲学,具有这样的特性。

简单地说,不可以使用可变字符串,例如所有的STD::String对象来进行字符串交互。

简单地说,不。对于可变字符串,例如所有std::String对象,字符串内部不可行。

不太可行,因为
std::String
是可修改的


已知实现尝试使用写时复制,但这在多线程代码中会导致这样的问题,我认为这已经过时。正确实现也非常困难-也许不可能?如果有人获取字符串中某个字符的指针,然后修改另一个字符,我不确定这是否是permi不允许使第一个指针无效。如果不允许,那么COW也不可能,我想,但我不记得它是如何工作的。

不太可能,因为
std::string
是可修改的


已知实现尝试使用写时复制,但这在多线程代码中会导致这样的问题,我认为这已经过时。正确实现也非常困难-也许不可能?如果有人获取字符串中某个字符的指针,然后修改另一个字符,我不确定这是否是permi无法使第一个指针无效。如果不允许,那么COW也不可能,我想,但我不记得它是如何工作的。

编译器可能只对代码中出现的字符串文本进行字符串内部处理。如果使用字符串文本初始化std:strings,并且某些文本多次出现,则mpiler只能将此字符串的一个副本存储在二进制文件中。在运行时没有字符串内部存储。mingw支持编译时字符串内部存储,如前所述。

编译器只能对代码中出现的字符串文本进行字符串内部存储。如果初始化std:strings时使用字符串文本以及一些文本多次出现,编译器可能只在二进制文件中存储此字符串的一个副本。在运行时没有字符串内部存储。如前所述,mingw支持编译时字符串内部存储。

两个想法:

  • myclass
    是一个模板类吗?
    std::string
    类是模板类
    basic\u string
    的类型定义。这意味着编译测试函数时,编译器可以访问basic\u string的完整源代码,而不仅仅是头。此附加信息可以在交换更高的编译时间

  • >P>大多数C++标准库实现都是高度优化的(而且几乎可读性差)。

      两个想法:

      • myclass
        是一个模板类吗?
        std::string
        类是模板类
        basic\u string
        的类型定义。这意味着编译测试函数时,编译器可以访问basic\u string的完整源代码,而不仅仅是头。此附加信息可以在交换更高的编译时间

      • >P>大多数C++标准库实现都是高度优化的(而且几乎可读性差)。


      鉴于您已经选择了一个“非真实问题”投票,我认为您必须解释什么是“字符串内部处理”。或者我会解释-这是一个对字符串的操作,返回所谓的“规范”字符串的表示形式,其属性为&x==&y当且仅当x==y。换句话说,对于每个可能的字符串值,最多有一个“插入字符串”具有该值的对象。这种性能差异可以用写时复制来解释。但是写时复制在多线程方面有问题。@CodeInChaos我想是的。std::string one不能再快了,因为它也必须复制数据,不是吗?有什么比memcpy更快呢?有可能
      stD::在你的实现中,String  Test2= Test1替换它,但同样的优化不会赶上你的类。它快多少?@迈克:如果你认为C++是漂亮的,你还有很多东西要学。考虑到你已经得到了一个“不是真正的问题”的投票,我想你必须解释什么是“字符串内部处理”。或者我会的——这是一个对字符串的操作,返回所谓的“规范”字符串的表示形式,其属性为&x==&y当且仅当x==y。换句话说,对于每个可能的字符串值,最多有一个“插入字符串”具有该值的对象。这种性能差异可以用写时复制来解释。但是写时复制在多线程方面有问题。@CodeInChaos我想是的。std::string one不能再快了,因为它也必须复制数据,不是吗?有什么比memcpy更快呢?有可能
      stD::在你的实现中,String  Test2= Test1替换它,但同样的优化不会赶上你的类。它快多少?@迈克:如果你认为C++是漂亮的,那么你还有很多要做的事情。