c++ - 将 long 转换为 wchar_t *

标签 c++ performance visual-c++

感谢阅读。

我认为我在这方面已经很接近了,但我可以利用一些专业知识来理解为什么我对某事的尝试没有按照我期望的方式进行。

我(目前)需要的是将 long 类型(LONG,因为我实际上是在 VC++ 中,但我知道这只是一个 typedef)转换为 wchar_t *。我能够获得我想要的结果,但我无法理解为什么我认为应该起作用的方法……不起作用。这是实现我想要的结果的代码:

const std::wstring myString{ std::to_wstring(wRect.bottom) };
const wchar_t * myCharPointer{ myString.c_str() };

与我想采用的方法相比:

const wchar_t * lWind{ std::to_wstring(wRect.bottom).c_str() };

在 VS Community 中使用我的调试器,我确定 myCharPointer 指向正确的值(“600”),但是 lWind 被分配到指向(或者可能根本没有得到新的分配?)空字符串/空字符串。

我很好奇这两种方法的理论性能方面,即使用 2 行代码和 2 种不同类型的变量来获得我想要的值与 1 行代码相比。显然,会调用一些后端代码来执行这些方法中的每一种,但我不确定一种方法是否比另一种方法的性能成本更高。

我很感激人们对此的任何反馈;很可能我遗漏了一些明显的东西,我试图实现的总体目标甚至可能以更好的方式完成,但现在我想满足我的好奇心。谢谢!

最佳答案

to_wstring 按值返回一个 wstring。临时对象的析构函数在调用 c_str 后被调用,当它在下一行失去作用域时,指针将变为无效。

const wchar_t * lWind{ std::to_wstring(wRect.bottom).c_str() }; // after this line invalid pointer

您可以通过存储一个与 wchar_t 指针一样长的临时字符串来修复它。

std::wstring ws = std::to_wstring(100);

const wchar_t * lWind{ ws.c_str() };

关于c++ - 将 long 转换为 wchar_t *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38092099/

相关文章:

c++ - ActiveMQ C++ 教程

c++ - 将二进制文件读取到 unsigned char 数组并将其写入另一个

c++ - 在没有开销的情况下实现push_back的最佳方法是什么

c++ - 在不知道类成员的情况下从基类实例创建派生类实例

c++ - 如何多行#import

c++ - 如何将模板转换为模板 pre C++11

c++ - 如何使用 Qt 进行触摸屏校准

java - 为什么第一次调用构造函数花费的时间比其他调用多 10 倍?

performance - HTTP 获取请求 |等待时间长

c - 哪些选项与 gcc 一起使用以获得最大的安全检查?