加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – std :: remove_reference有什么意义

发布时间:2020-12-16 10:14:42 所属栏目:百科 来源:网络整理
导读:让我潜入C 14通用lambdas: #include iostream// g++ -std=c++14 templatetypename TT incr(T v){ return v + 1;}int main(){ float f = 2.0; int i = 3; auto selfincr = [] (auto value) { value = incrstd::remove_referencedecltype(value)(value); // A
让我潜入C 14通用lambdas:

#include <iostream>

// g++ -std=c++14 

template<typename T>
T incr(T v)
{
    return v + 1;
}


int main()
{
    float f = 2.0;
    int i = 3;

    auto selfincr = [] (auto & value)
        {
            value = incr<std::remove_reference<decltype(value)>>(value);    // A
            value = incr<decltype(value)>(value);                           // B
        };


    selfincr(f);
    selfincr(i);

    std::cout << "f " << f << ",i " << i << std::endl;
    return 0;
}

因为//行引起了一个

invalid initialization of non-const reference of type ‘T&’ from an rvalue of type ‘T’

我的直接猜测是删除了引用,所以我添加了行// A.但是这会产生一个

no matching function for call to ‘incr(T&)’

那我怎么能删除那个引用呢?

解决方法

So how could I remove that reference ?

incr< std :: remove_reference< decltype(value)>>(value),您指定std::remove_reference<T>作为模板参数,但不指定T引用的类型(即decltype(value)).你想要的应该是什么

value = incr<typename std::remove_reference<decltype(value)>::type>(value);    // A
//           ~~~~~~~~                                       ~~~~~~

从C 14开始,你可以更简单:

value = incr<std::remove_reference_t<decltype(value)>>(value);    // A
//                                ~~

LIVE

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读