相关疑难解决方法(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语句通过auto &&获取范围?

基于范围的for声明在§6.5.4定义为等同于:

{
  auto && __range = range-init;
  for ( auto __begin = begin-expr,
             __end = end-expr;
        __begin != __end;
        ++__begin ) {
    for-range-declaration = *__begin;
    statement
  }
}
Run Code Online (Sandbox Code Playgroud)

其中range-init定义了两种基于范围的形式for:

for ( for-range-declaration : expression )         =>   ( expression )
for ( for-range-declaration : braced-init-list )   =>   braced-init-list
Run Code Online (Sandbox Code Playgroud)

(该条款进一步规定了其他子表达式的含义)

为什么__range给出推导类型auto&&?我的理解auto&&是,通过传递它来保留表达式的原始值(左值/右值)是有用的std::forward.但是,__range不会通过任何地方std::forward.它得到的范围内时迭代器作为一个人的只用__range,__range.begin()begin(__range).

使用"通用参考"有auto&&什么好处?还auto&不够吗? …

c++ for-loop auto c++11 universal-reference

15
推荐指数
1
解决办法
3339
查看次数

如何访问兼容的 std::variant 变体?

#include <variant>


struct A
{
    void foo(){}
};


struct B
{
    void foo(){}
};

int main()
{
    std::variant< A, B > v{ A{} };
    v.foo();  // doesn't work
}
Run Code Online (Sandbox Code Playgroud)

如何在std::variant不知道其类型但知道其属性的情况下使用该值?我相信这被称为相当于 Duck Typing 的通用多态性。

c++ variant c++20

4
推荐指数
1
解决办法
64
查看次数