我应该使用指向 std::string 的指针吗
在学习 C++ 时,我首先使用 Qt 库,而不是标准的 C++、STL 等(好吧,所以我是 C++ 新手,被 Qt 宠坏了)。在 Qt 上,QString 使用隐式共享,因此使我能够将其复制分配给另一个变量,例如:
QString var1=QString("Hi there!");
QString var2=var1
这样就可以很好地完成任务,而无需太多开销。但现在,我正在尝试 std::string 那么,我应该这样做
std::string var1=std::string()
还是,
std::string* var1=new std::string()
还有,QVector 和 std::vector 怎么样。如果我必须使用指针...有什么建议吗?
In learning c++, I first use Qt library instead of the standard C++, STL and all that (Ok, so I'm new with c++ and spoiled by Qt). On Qt, QString used implicit sharing, thus enabling me to just copy assign it to another variable like:
QString var1=QString("Hi there!");
QString var2=var1
And that would do nicely without much overhead. But now, i'm trying std::string so, should I do
std::string var1=std::string()
or
std::string* var1=new std::string()
And also, how about QVector and std::vector. And If I do have to use the pointer... any tips?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(4)
不乱于心2024-12-19 20:49:49
std::string var1("Hi there!");
std::string var2=var1;
std::string 类有一个 =
运算符定义为:
string& operator= ( const string& str );
~没有更多了~
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
std::string 是否使用写时复制取决于实现(即您的标准库供应商决定)。然而,大多数 std::string 实现不会使用 COW,主要是因为大多数(如果不是全部)读取操作都会强制进行复制 -
operator[]
返回一个引用、c_str()
和data()
返回一个指针。将此与 QString::operator[] 进行比较,后者返回代理对象。尽管存在上述情况,但不要使用指向
std::string
的指针,除非您确定(通过测量)字符串副本是应用程序中的瓶颈。另外,请注意
QString
存储 UTF-16 字符串,而std::string
存储char
序列 --QByteArray
将是 Qt 的等效项。Whether
std::string
uses copy-on-write depends on the implementation (i.e. your standard library vendor decides that). However, moststd::string
implementations will not use COW, largely due to the fact that most if not all read operations force a copy --operator[]
returns a reference,c_str()
anddata()
return a pointer. Compare this toQString::operator[]
, which returns a proxy object.In spite of the above, don't use pointers to
std::string
, unless you determine (by measuring) that string copies are the bottleneck in your application.Also, beware that
QString
stores UTF-16 strings, whereasstd::string
stores a sequence ofchar
s --QByteArray
would be the Qt equivalent.