常规"字符串"类"rwcstring"类之间的区别
difference between a regular "string" class "rwcstring" class
谁能告诉我常规的string
类和roguewave的rwcstring
类的确切区别?我项目中的代码大量使用了rwcstring
类。我的疑问是,如果两者都处理和操纵字符串,那么两者之间的确切区别是什么。为什么rwcstring类被认为比常规的string
类更有效?
RogueWave的RWCString
使用了一种称为延迟复制的技术来提高其性能。基本上,这意味着复制字符串(无论是通过复制构造函数还是复制赋值操作符)实际上并不复制字符串的内容,而只是保留一个指向原始字符串内容的指针。只有在真正需要的时候才会进行复制(通常是因为字符串内容即将被修改)。由于字符串通常不会被修改,因此这提供了可衡量的性能改进。
std::string
实现并没有明确禁止使用这种技术。事实上,标准中的一些条款就是考虑到这种可能的优化而制定的。问题是,有一些方法可以克服这种机制,例如获取指向字符串内容的指针并直接更改它们,而不使用类机制。这就是为什么std::string
不常用延迟复制的原因。
所以,总而言之,你可能会说RWCString
更有效,但也比std::string
的通常实现更不安全。
看一下这些文档:
http://www.roguewave.com/portals/0/products/legacy-hpp/docs/tlsref/rwcstring.html相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 这 4 个 lambda 表达式之间有什么区别?
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- (double) 和 double() 之间的区别
- & 和 * 之间的区别
- std::is_convertible 和 std::convertible_to 之间的区别(在实践中)?
- 析构函数和'delete'之间的区别
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- OpenMP #pragma omp for v/s #pragma omp parallel for 之间的区别?
- S() 与 S{} 之间的区别?