深入理解C++11_c++ string char

深入理解C++11_c++ string char1.语法decltype(expression)decltype(declaretype)用于查询表达式的类型,即编译时期进行自动类型推导。如上所示,该语句返回expression表达式的类型。注意:decltype仅仅是查询表达式的类型,并不会对表达式求值。2.推导规则1)如果expression是一个不被括号()包围的表达式,或者是一个类成员访问表达式,或者是一个单独的变量,那么decltype(exp)的类型就和exp一致,这是最普遍最常见的情况。2)

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1. 语法

decltype ( expression )

decltype(declare type)用于查询表达式的类型,即编译时期进行自动类型推导。如上所示,该语句返回expression表达式的类型。

注意:decltype仅仅是查询表达式的类型,并不会对表达式求值。

2. 推导规则

1)如果 expression是一个不被括号( )包围的表达式,或者是一个类成员访问表达式,或者是一个单独的变量,那么 decltype(exp) 的类型就和 exp 一致,这是最普遍最常见的情况。

2)如果 expression是函数调用,那么 decltype(exp) 的类型就和函数返回值的类型一致。

3)如果 expression是一个左值,或者被括号( )包围,那么 decltype(expression) 的类型就是 expression的引用;假设 expression的类型为 T,那么 decltype(expression) 的类型就是 T&。

3. auto与decltype

auto varname = value;
decltype(exp) varname = value;

1)auto 根据=右边的初始值 value 推导出变量的类型,而 decltype 根据 exp 表达式推导出变量的类型,跟=右边的 value 没有关系;

2)auto 要求变量必须初始化,而 decltype 不要求,即可以写成这样“decltype(exp) varname;”;

4. 基本使用

const int&& foo();
int i;
struct A { double x; };
const A* a = new A();

decltype(foo())  x1 = 1;  // const int&&      (1)
decltype(i)      x2;      // int              (2)
decltype(a->x)   x3;      // double           (3)
decltype((a->x)) x4 = 1;  // double&          (4)

5. 实例

#include <iostream>
#include <type_traits>
using namespace std;

struct A { double x; };
const A* a;

decltype(a->x) y;       // type of y is double (declared type)
decltype((a->x)) z = y; // type of z is const double& (lvalue expression)

template<typename T, typename U>
auto add(T t, U u) -> decltype(t + u) // return type depends on template parameters
									  // return type can be deduced since C++14
{
	return t + u;
}

int main()
{
	int i = 33;
	decltype(i) j = i * 2;

	std::cout << "i and j are the same type? " << std::boolalpha
		<< std::is_same_v<decltype(i), decltype(j)> << '\n';

	std::cout << "i = " << i << ", "
		<< "j = " << j << '\n';

	auto f = [](int a, int b) -> int
	{
		return a * b;
	};

	decltype(f) g = f; // the type of a lambda function is unique and unnamed
	i = f(2, 2);
	j = g(3, 3);

	std::cout << "i = " << i << ", "
		<< "j = " << j << '\n';

	system("pause");
	return 0;
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/195680.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • IDEA 配置SVN ,SVN安装后没有svn.exe

    IDEA 配置SVN ,SVN安装后没有svn.exe在idea中配置svn,首先要在电脑上安装svn(进入官网下载安装即可);svn官网下载地址:https://tortoisesvn.net/downloads.html第二,打开idea,选择file->settings->VersionControl->Subversion,OK完成;如果发现找不到svn.exe?之…

  • java女人_Java是一个事业成功的女人

    java女人_Java是一个事业成功的女人原标题:Java是一个事业成功的女人文/北京达内教育(微信号:bjtedu01)关注后免费可获得达内5天训练营,都是干货哦~Java是一个事业成功的女人。很多在她手下干过的人都感觉她的能力跟她的地位并不般配,她更多的是通过技巧打动了中层管理人员。你也许会认为她是很有智慧的人,你愿意跟随她。但你要准备好在数年里不断的听到“你用错了接口,你遗漏了一个分号”这样的责备。C++是Java的表姐。她在…

  • 在Android Studio中新建android gradle project的时候connect refused

    在Android Studio中新建android gradle project的时候connect refused

  • xiao77论坛php,论坛

    论坛1.如何加其他人为好友?ID头像下方有“加好友”、“发消息”、“打招呼”和“串个门”的互动功能。在发帖的头像区和该人的个人资料区都可以进行互动,且有不同的奖励。2.看到喜欢的帖子如何保存?可点击帖子下方的“收藏”按钮,然后回到个人空间的收藏应用中查看即可。3.如何查看所有我参与过的帖子?登录成功后,在页面右上角点击“帖子”即可查看。4.如何知道我参与的帖子有了新的回复?当有人回复了你的…

  • “请在微信客户端打开链接”解决方案[通俗易懂]

    “请在微信客户端打开链接”解决方案[通俗易懂]1、“请在微信客户端打开链接”解决方案https://blog.csdn.net/weixin_41190571/article/details/829908392、微信调试工具无法点击授权按钮https://blog.csdn.net/Call_me_small_pure/article/details/801013073、微信web开发工具https://mp.weixin.qq.c…

  • (java)五大常用算法

    (java)五大常用算法算法一:分治法基本概念1.把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。2.分治策略是对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号