auto&&和decltype(auto)之间有什么区别?
创始人
2024-09-22 17:01:06
0

auto&& 和 decltype(auto) 都是 C++11 中引入的新特性,用于模板函数的返回类型推导。它们的共同点是可以用于在调用时推导函数返回类型,并且可以保留对象的引用/值特性。但是,它们的具体用法和含义略有不同。

auto&& 表示对变量进行引用折叠,推导出的返回类型根据变量类型的值特性来确定,如果变量是左值,则推导出的返回类型是左值引用类型,如果是右值,则推导出的返回类型是右值引用类型。

decltype(auto) 则通常用于获取表达式的引用/值特性,其中 decltype 类型推导的原理与 auto 类型推导相似,但是 decltype(auto) 可以明确指示获取表达式的类型。

下面是一个使用 auto&& 和 decltype(auto) 的示例:

#include 
using namespace std;

int i = 0;
int& foo() { return i; }
int&& bar() { return move(i); }

template
auto auto_template(T&& x) -> decltype(x) {
    return x;
}

template
decltype(auto) decltype_template(T&& x) {
    return forward(x);
}

int main() {
    auto&& a1 = foo();
    decltype(auto) a2 = foo();
    auto&& a3 = bar();
    decltype(auto) a4 = bar();

    a1 = 1;
    a2 = 2;
    //a3 = 3; // compile error
    a4 = 4;

    int x = 5;
    auto&& a5 = x;
    decltype(auto) a6 = x;

    a5 = 6;
    a6 = 7;

    cout << i << ", " << a1 << ", " << a2 << ", " << a3 << ", " << a4 << ", " << a5 << ", " << a6 << endl; // 7, 1, 2

相关内容

热门资讯

最新技巧“微扑克辅助”开挂辅助... 无需打开直接搜索加微信客服(136704302)咨询了解微扑克辅助辅助器目前(微信:13670430...
一分钟快速了解“wepoker... >>您好:wepoker开挂辅助确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总...
重大来袭“wepoker有没有... 无需打开直接搜索加微信客服(136704302)咨询了解wepoker有没有挂辅助器目前(微信:13...
最新技巧“wepoker靠谱不... 您好:wepoker靠谱不这款游戏是可以开挂的,软件加【添加微信客服136704302】确实是有挂的...
免费测试版“wepoker有挂... 您好:wepoker有挂吗透视软件的软件,软件加客服确实是有挂的,很多玩家在这款游戏中打牌都会发现很...
一分钟了解“微扑克发牌规律”开... 微扑克发牌规律是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加我微信...
重大消息“wepoker可以透... 您好,wepoker可以透视开挂吗这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302...
玩家攻略“wpk透视插件怎么安... 无需打开直接搜索;操作使用教程:玩家攻略“wpk透视插件怎么安装”开挂辅助器(透视)曝光教程1、界面...
教程攻略“wepoker能开挂... 您好:wepoker能开挂吗这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用...
玩家必看教程“wepoker透... 您好:wepoker透视真的吗这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多...