gpt4 book ai didi

c++ - std::remove_reference 有什么意义

转载 作者:太空狗 更新时间:2023-10-29 19:47:40 26 4
gpt4 key购买 nike

让我深入了解 C++14 通用 lambda:

#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;
}

因为 //B 行导致了一个

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

关于c++ - std::remove_reference 有什么意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50158770/

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