深入理解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)


相关推荐

  • python面向对象编程指南 pdf_python面向对象的三个基本特征

    python面向对象编程指南 pdf_python面向对象的三个基本特征虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程。下面就来了解一下如何在Python中进行对象编程。一.如何定义一个类  在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法。  类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义:

    2022年10月30日
  • Android 平台的Python——基础篇(一)

    Android 平台的Python——基础篇(一)前言(本文以Python3为例,Python3是未来,大家都懂的)Python作为一个功能强大又语法简洁的语言,其应用已无需多言。要想在Android平台运行起Python,也有方案实现,其实质就是在Android系统上搭建Python环境。对此Google已经提供了SL4A(ScriptingLayerforAndroid)方案,支持多种脚本语言,除此之外,还可以使用一个

  • PHP程序开发之使用header定义一个php页面为utf-8编码或GBK编码

    PHP程序开发之使用header定义一个php页面为utf-8编码或GBK编码php页面为utf-8编码 header(“Content-type:text/html;charset=utf-8”); php页面为gbk编码 header(“Content-type:text/html;charset=gb2312”); php页面为big5编码 header(“Content-type:text/html;charset=b

  • 闫学灿acwing_算法基础课acwing下载

    闫学灿acwing_算法基础课acwing下载给定一个长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一:C l r d,表示把 A[l],A[l+1],…,A[r] 都加上 d。Q l r,表示询问数列中第 l∼r 个数的和。对于每个询问,输出一个整数表示答案。输入格式第一行两个整数 N,M。第二行 N 个整数 A[i]。接下来 M 行表示 M 条指令,每条指令的格式如题目描述所示。输出格式对于每个询问,输出一个整数表示答案。每个答案占一行。数据范围1≤N,M≤105,|d|≤10000,|A[i]|≤1

  • 中国电信修改光猫路由模式为桥接模式怎么改_打10000改电信光猫桥接模式

    中国电信修改光猫路由模式为桥接模式怎么改_打10000改电信光猫桥接模式首先,需要搞到超级管理员的账号和密码,可以上网根据光猫型号查找,也可以直接跟安宽带的工作人员要.第一步:准备超级管理员账号和密码.可以自行根据光猫型号搜索,也可以直接跟安宽带的工作人员要.第二步:使用超级管理员账密登录网关管理页面(光猫)一般为192.168.1.1(前提你的路由模式为路由模式,而不是桥接模式)第三步:修改光猫参数1:连接名称修改改为3_INTERNET_R_VID_412:连接模式修改为桥接3:保存第四步:使用路由器拨号宽带账号和密码一般都会贴在光猫上,如果丢失了

  • Django(37)配置django日志[通俗易懂]

    Django(37)配置django日志[通俗易懂]前言django框架的日志通过python内置的logging模块实现的,既可以记录自定义的一些信息描述,也可以记录系统运行中的一些对象数据,还可以记录包括堆栈跟踪、错误代码之类的详细信息。log

发表回复

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

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