![]() |
1
183
您可以将该临时字符串对象复制到其他一些字符串对象,并从该对象中获取C字符串:
注意我做了临时字符串
当然,后者可能不容易,复制也可能太贵。您可以做的是将临时对象绑定到
我觉得这是最好的解决办法。不幸的是,它并不为人所知。 |
![]() |
2
13
你所做的就是创造一个临时的。这个临时变量存在于编译器确定的范围内,这样它的长度就足以满足它要去哪里的需求。
一旦声明
你的声明
|
![]() |
3
5
在这一行中:
|
![]() |
4
5
ss.str()返回的std::string对象是一个临时对象,其生命周期将限制在表达式中。因此,在没有垃圾桶的情况下,不能将指针分配给临时对象。 现在,有一个例外:如果您使用常量引用来获取临时对象,那么在更大的生命周期内使用它是合法的。例如,您应该这样做:
这样你可以得到更长时间的字符串。 现在,您必须知道有一种叫做rvo的优化,它说如果编译器通过函数调用看到初始化,并且函数返回一个临时的,它将不会进行复制,而只是使分配的值成为临时的。这样您就不需要实际使用引用,只有当您想确保它不会复制时才有必要。这样做:
会更好更简单。 |
![]() |
5
5
这个
C字符串
在下面的代码中,第一个
回归
在gcc中,字符串使用引用计数和写时复制。因此,您将发现以下内容是正确的(至少在我的GCC版本上是这样)
这两个字符串在这里共享同一个缓冲区。当您更改其中一个时,缓冲区将被复制,并且每个缓冲区都将保存其单独的副本。不过,其他字符串实现做的事情不同。 |
![]() |
cdecaro · 将数字的字符串数组转换为整数数组时,元素变为0 7 年前 |