gpt4 book ai didi

c++ - 在 C++ 中实现返回计算值的最有效方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:48 25 4
gpt4 key购买 nike

随着返回值优化之上的右值引用的出现,实现这样的核心功能的最有效方法是什么?我该如何改进这个实现,还是应该让它不管?

template <typename T>
string
to_string(const T& t)
{
stringstream ss;
ss << t;
return ss.str();
}

显然,我想尽可能避免复制或分配内存。TIA。

编辑:感谢 D. Rodriguez 的详细回答。现在,我的问题有第二部分。有没有办法对此进行改进?

#define to_cstr( T ) (to_string( T ).c_str())

当然,如果可以的话,我想避免宏,但是如果我复制并粘贴上面的模板代码以返回 ss.str().c_str() 和 const char*,则临时文件的生命周期不够长;尽管代码似乎可以运行,但 valgrind 提示(红灯)。

对于 to_cstr(),我还没有想出比上面的 MACRO 更干净的解决方案。有什么改进的想法,还是我也应该不理会?

最佳答案

别管它,它本来就很高效。即使使用 C++03 编译器,编译器也会优化拷贝。

基本上编译器会确保to_string的调用代码中的对象,to_string的返回语句,以及ss.str的返回语句() 都占用完全相同的内存位置。这反过来意味着不会有拷贝。

在标准要求之外,calling conventions对于按值返回一个对象的函数的返回语句,该对象不适合我知道的所有 32/64 编译器(包括 VS、gcc、intel、suncc)中的寄存器,将传递一个指向函数所在内存位置的指针是构造返回的对象,以便代码将在内部转换为以下行中的内容:

// Not valid C++! Just for illustration purposes
template <typename T>
to_string( uninitialized<string>* res, const T& t ) {
stringstream ss;
ss << t;
stringstream::str( res, &ss ); // first argument is return location
// second argument is `this`
}

关于c++ - 在 C++ 中实现返回计算值的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7635348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com