将long转换为wchar_t *

时间:2016-06-29 06:40:31

标签: c++ performance visual-c++

感谢阅读。

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

我需要(目前)需要将类型转换为长(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社区中使用我的调试器我已经确定myCharPointer指向正确的值(" 600"),但是lWind被分配到点(或者根本不会获得新的任务? )到空字符串/空字符串。

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

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

1 个答案:

答案 0 :(得分:2)

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() };