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

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程…

    正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程…当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一:强制重新启动电脑(长按电源键然后再按一下),然后会有好多项选择,第一项一般是“正常启动”最后一项是“最后一次正确配置”,选择“最后一次正确配置”(有的电脑可能提…

    2022年6月14日
    110
  • http接口开发与调用案例[通俗易懂]

    http接口开发与调用案例[通俗易懂]http接口开发与调用案例

    2022年5月15日
    45
  • 如何查看XPS文件

    如何查看XPS文件xps文件相当于离线版网页,WPS不支持查看XPS文件,Office也不支持查看XPS文件今天就分享两种查看XPS文件的方法第一种方法就是使用Speedpdf在线文件转换网站将XPS文件免费转换成PDF文件或者Word文件,这个样子就可以查看XPS文件。第二种方法下载XPSViewer并且添加到计算机。如果电脑系统是Windows10只需搜索XPSViewer就可以使用,但是如果你已清除计算机的可选功能,就需要重新安装XPSViewer…

    2022年5月22日
    228
  • C++字符串格式化的几种方式

    C++字符串格式化的几种方式使用 snprintf 使用 boost format 使用 stringstream 具体示例使用 snprintf include stdio h usingstd string 准备数据 stringhaha haha intnum 3 准备格式 stringfmt teststring s testnumber stdio h

    2025年11月10日
    1
  • Hmily 源码解析(二)—— Hmily事务工作流程「建议收藏」

    Hmily 源码解析(二)—— Hmily事务工作流程「建议收藏」Hmily源码解析(二)前言这一篇不想谈论Hmily源码的技术实现,而是想在过了一遍hmily的实现后把hmily的工作思路单独地整理出来再进行一次总结。看看能不能进一步有所得。以hmily-demo-springcloud为例,它的实现思路如下。Hmily事务工作流程首先它是基于切面编程来实现分布式事务的操作,及通过日志记录TCC事务的信息以保证最终一致性。前…

    2022年5月11日
    32
  • win10下python环境变量设置

    win10下python环境变量设置我用的是python_2.7.3.msi,从官网下载之后,一路按照默认进行安装。安装之后配置环境变量的步骤如下:1,点“我的电脑”,右键选“属性”2,选择“高级系统设置”>选“环境变量”

    2022年7月5日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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