std::deque<std::string> logQ;
// 写法一
for (auto && msg : logQ)
{
printf("%s\n", msg.c_str());
}
// 写法二
for (auto & msg : logQ)
{
printf("%s\n", msg.c_str());
}
问题:
写法一和写法二的区别是啥?为啥写法一的效率更高?
std::deque<std::string> logQ;
// 写法一
for (auto && msg : logQ)
{
printf("%s\n", msg.c_str());
}
// 写法二
for (auto & msg : logQ)
{
printf("%s\n", msg.c_str());
}
问题:
写法一和写法二的区别是啥?为啥写法一的效率更高?
关于auto类型推导见:
https://segmentfault.com/a/11...
https://segmentfault.com/a/11...
https://blog.csdn.net/ywcpig/...
https://blog.csdn.net/weixin_...
这两种写法在这里推导的类型应该是相同的呀,求上测试结果和代码。
2 回答1.7k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
1 回答949 阅读
1 回答1.1k 阅读
2 回答1.1k 阅读
auto&&
的推导收到初始化值的 value category 得影响。用左值初始化,推导得结果是一个左值引用;否则是一个右值引用。auto&
的推导与初始化值的 value category 无关。你这个例子的,
msg
是用*logQ.begin()
来初始化的,这个是个左值,两个循环推导出来的类型都是std::string &
,没有区别。