相关疑难解决方法(0)

auto &&告诉我们什么?

如果您阅读的代码如下

auto&& var = foo();

where foo是按类型值返回的任何函数T.然后var是左值类型的左值引用T.但这意味着var什么呢?这是不是意味着,我们被允许窃取资源var?是否有任何合理的情况,您应该使用auto&&告诉读者您的代码与您在返回时unique_ptr<>告诉您拥有独占所有权时的行为?例如什么T&&时候T类型?

我只是想了解,如果有任何其他用例auto&&比模板编程中的用例; 喜欢这篇文章中的例子中所讨论的那些通用参考斯科特迈尔斯.

c++ auto c++11 forwarding-reference

153
推荐指数
2
解决办法
4万
查看次数

在基于范围的for循环中使用通用引用有什么好处?

const auto&如果我想执行只读操作就足够了.但是,我已经碰到了

for (auto&& e : v)  // v is non-const
Run Code Online (Sandbox Code Playgroud)

最近几次.这让我想知道:

是否有可能在一些不起眼的角落情况下,存在使用通用引用一些性能优势,相比auto&还是const auto&

(shared_ptr是一个晦涩角落案件的嫌疑人)


更新 我在收藏夹中找到的两个示例:

迭代基本类型时使用const引用的任何缺点?
我可以使用基于范围的for循环轻松迭代地图的值吗?

请专注于一个问题:我为什么要在使用自动&&范围为基础的for循环?

c++ performance for-loop move-semantics c++11

111
推荐指数
3
解决办法
2万
查看次数

为什么std :: move没有移动

在vs13中写了以下代码:

std::vector<std::string> myvector(1000);
std::fill(myvector.begin(), myvector.end(), "Hello World");
std::vector<std::string> pushto;
for (auto s: myvector)
    pushto.push_back(std::move(*s));
Run Code Online (Sandbox Code Playgroud)

工作,但没有移动,它称为字符串复制ctor.myvector最后还有他的"Hello World".像这样使用常规的c ++ 98迭代:

 std::vector<std::string> myvector(1000);
 std::fill(myvector.begin(), myvector.end(), "Hello World");
 std::vector<std::string> pushto;
 for (auto s = myvector.begin(); s != myvector.end();s++)
    pushto.push_back(std::move(*s));
Run Code Online (Sandbox Code Playgroud)

实际上工作,并且调用了移动.myvector字符串是空的.为什么第一个更现代的符号不起作用?

c++ c++11 visual-studio-2013

-1
推荐指数
1
解决办法
90
查看次数