首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wstring指针赋值C++

wstring指针赋值C++
EN

Stack Overflow用户
提问于 2013-11-26 20:12:45
回答 3查看 5.1K关注 0票数 2

我试图将一个值赋值给wstring指针,但是该值没有被分配;但是,当我将指针的创建和赋值分解为两行时,它可以工作。为什么会这样呢?

例如:

代码语言:javascript
复制
std::wstring* myString = &(L"my basic sentence" + some_wstring_var + L"\r\n");

以上所述不起作用,但下文确实有效:

代码语言:javascript
复制
std::wstring temp = (L"my basic sentence" + some_wstring_var + L"\r\n");
std::wstring* myString = &temp;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-26 20:17:16

在第一个示例中,您将获得临时地址。在该行执行完分配给wstringmyString对象之后,就不再可用了(顺便说一句,这些对象被称为rvalues )。我认为应该很明显,在第二个示例中,您有一个真正的对象(一个lvalue,只要它不超出作用域就有效。

为了克服这个限制,您可以直接在堆上创建一个wstring,这可能更适合您的情况,但是如果没有更多的信息,就很难说了:

代码语言:javascript
复制
std::wstring* myString = new std::wstring(L"my basic sentence" + some_wstring_var + L"\r\n");

新创建的wstring将使用临时rvalue的内容进行初始化。只是别忘了在你完成指针之后销毁它。

有了C++11,事情就变得复杂了,因此出于性能原因,临时人员可以更频繁地重用。但是这个话题是非常的,而且将会超越这个问题。我只想提这件事,因为它可能也会影响到你。要想得到一个非常好的解释,请看一个这样的问题:What are move semantics?

票数 9
EN

Stack Overflow用户

发布于 2013-11-26 20:18:05

代码语言:javascript
复制
std::wstring* myString = &(L"my basic sentence" + some_wstring_var + L"\r\n");

它指向一个临时对象,它的生命时间以分号结束,因此取消引用指针并使用它是未定义的行为。

代码语言:javascript
复制
std::wstring temp = (L"my basic sentence" + some_wstring_var + L"\r\n");
std::wstring* myString = &temp;

它指向一个临时对象,但是生命时间更长,当该临时对象存在时,取消引用它是有效的。

票数 1
EN

Stack Overflow用户

发布于 2013-11-26 20:15:05

当然,您不能将字符串常量的入口(这就是&是什么)分配给变量。你想过了吗?指针指向哪里?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20227012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档