gpt4 book ai didi

c++ - 使用临时对象是否有性能优势?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:11:22 26 4
gpt4 key购买 nike

我正在审查 HTTP Server 3 Boost 网站上的示例。 connection中有以下代码类:

boost::tribool result;
boost::tie(result, boost::tuples::ignore) = request_parser_.parse(request_, buffer_.data(), buffer_.data() + bytes_transferred);

其中 parse 声明为

template <typename InputIterator>
boost::tuple<boost::tribool, InputIterator> parse(request& req, InputIterator begin, InputIterator end)

我相信目标是将 tribool 的返回值复制到局部变量。但是,如果可以编写类似

的内容,那么通过临时对象 ( boost::tie) 执行此操作的意义何在?
boost::tuple<boost::tribool, char*> result = request_parser_.parse(request_, buffer_.data(), buffer_.data() + bytes_transferred);
// Our tribool is available via result.get<0>();

?

最佳答案

好处不是性能,而是实用性和可读性:因为您对 parse 返回的第二个对象不感兴趣, 没有必要保留它。最好完全忽略它,只得到您真正感兴趣的结果,即 tribool。 .以下代码使用了 result , 会更清晰。

事实上,当一个函数返回多个数据时,将其“拆分”以分别获得各个元素通常是有用的(就可读性而言)。例如,考虑 std::set<T>::insert ,它返回一个指向该元素的迭代器以及一个指示它是否是新插入的 bool 值。您觉得以下哪些代码更清晰:

std::set<int> s;
std::pair<std::set<int>::iterator, bool> res = s.insert(42);

if (res.second)
{
doSomething(res.first);
}

对比

std::set<int> s;
std::set<int>::iterator itInsertedElement;
bool isNewlyInserted;

tie(itInsertedElement, isNewlyInserted) = s.insert(42);

if (isNewlyInserted)
{
doSomething(itInsertedElement);
}

在我看来,后者更容易阅读。

关于c++ - 使用临时对象是否有性能优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12795701/

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