c++11--类型自动推导

news2024/11/27 13:02:58

1.自动类型推断
1.1.auto
a.auto声明变量的类型必须由编译器在编译时期推导而得。

int main(){
	double foo();
	auto x = 1;//x类型为int
	auto y = foo();// y类型为double
	auto z;// err
	return 0;
}

b.auto声明得变量必须被初始化。
c.针对指针和引用
推导类型是指针类型时,可以使用auto或auto*形式。
推导类型是引用类型时,必须使用auto&形式。

int main()
{
	int x;
	auto p = &x;//int*
	auto* p2 = &x;//int*
	auto& q = x;// int&
	auto qq = x;// int 
}

d.针对类型修饰符const 和 volatile
采用auto&形式时,若右边表达式含义const属性,结果类型也含const属性。若没有,则不含。
采用auto形式时,结果类型不会包含const属性。但可通过const auto自行添加。
结果类型不会包含volatile属性。但可通过volatile auto自行添加。

int main()
{
	auto i = 1;//int
	const auto ii = 1;//const int
	auto& ci = 1;//const int&
	volatile int p = 1;
	auto pp = p;// int
	volatile ppp = p;//volatile int
	
	const int ci = 1;
	const int* const cp = &ci;
	auto t = cp;//const int*。舍弃的const是修饰cp自身的。const int中的const不属于cp,会作为指针指向整体推断出来。
}

e.一次采用auto定义多个变量场景

int main()
{
	int a;
	auto * p = &a, q = a;// p为int*,q为int
	auto qq = a, t = 1.1f;// err。qq =a中auto被推断为int。t=1.1f中auto又被推断为float。
}

e.1.采用auto,一行定义多个变量,多个变量共享auto,其余的类型修饰符各自独立。如修饰p的*对q不起作用。
e,2,采用auto,一行定义多个变量,每个变量定义时推导的auto应该类型一致。qq,t推导的auto不一致,引发了编译报错。
f.不可用场景

#include <iostream>
using namespace std;
void fun(auto x = 1){} // err。auto不可用于修饰函数形参。
struct str{
	auto var = 10;// err。auto不可用于修饰类型非静态成员字段。
};
int main(){
	auto z[3] = {1,2,3};//err。auto不可用于修饰数组。
	std::vector<auto> v = {1};//auto不可用于作为实例化模板的模板参数。
}

1.2.decltype

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

int main()
{
    int i;
    decltype(i) j = 0;
    cout << typeid(j).name() << endl;

    float a;
    double b;
    decltype(a+b) c;
    cout << typeid(c).name() << endl;
    return 0;
}

在这里插入图片描述
(1).decltype的类型推导基于表达式,类型是表达式的结果类型。auto基于初始化时的初始值推导类型。
(2).decltype的类型推导发生在编译时,auto也是。
(3).实例

#include <iostream>

// int
// const int

// int&
// int&&
// const int&
// const int&&

// int*
// const int*
// const int* const

int fun1() {
    return 1;
}
const int fun2() {
    return 1;
}
int a = 0;
const int ca = 1;
int& fun3() {
    a = 1;
    return a;
}
int&& fun4() {
    a = 1;
    return std::move(a);
}
const int& fun5(){
    return 1;
}
const int&& fun6(){
    return 1;
}
int* fun7(){
    return &a;
}
const int* fun8(){
    return &ca;
}
const int* const fun9(){
    return &ca;
}

int main()
{
    decltype (fun1) a1;
    decltype (fun2) a2;
    decltype (fun3) a3;
    decltype (fun4) a4;
    decltype (fun5) a5;
    decltype (fun6) a6;
    decltype (fun7) a7;
    decltype (fun8) a8;
    decltype (fun9) a9;
    return 0;
}

上述a1~a9推断所得类型将严格和表达式返回类型一致,它们是int、const int、int&、int&&、const int&、const int&&、int*、const int*、const int* const。

1.3.追踪返回类型
(1). 实例

template<typename T1, typename T2>
auto Sum(T1& t1, T2& t2) -> decltype(t1+t2){
	return t1+t2;
}

auto func() -> int
{
	return 1;
}

上述实例利用追踪返回类型定义函数,追踪返回类型也可用于函数类型声明。
(2).可利用追踪返回类型简化复杂类型定义

#include <type_traits>
#include <iostream>
using namespace std;
int (*(*pf())())(){
    return nullptr;
}

auto pf1() -> auto (*)() -> int (*)(){
    return nullptr;
}

int main(){
    cout << is_same<decltype(pf), decltype(pf1)>::value << endl;
    return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1333387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抠图、换背景、正装图证件照制作方法

本篇灵感是最近又要使用别的底色的正装照的图片。上学的时候&#xff0c;要求证件照的底色是蓝底、党员档案里要求图片的底色是红底、 将来上班的证件照要求是白底&#xff0c;并且无论是考研还是找工作都是制作简历的时候&#xff0c;根据简历的样板不同需要更换不同的底色。 …

HBase 集群搭建

文章目录 安装前准备兼容性官方网址 集群搭建搭建 Hadoop 集群搭建 Zookeeper 集群解压缩安装配置文件高可用配置分发 HBase 文件 服务的启停启动顺序停止顺序 验证进程查看 Web 端页面 安装前准备 兼容性 1&#xff09;与 Zookeeper 的兼容性问题&#xff0c;越新越好&#…

jQuery实现响应式瀑布流 - 实现灯箱效果

在这之前&#xff0c;有写过一篇关于实现瀑布流的文章&#xff0c;后期有人留言提出需要添加灯箱效果的功能&#xff0c;所以这次则讲述下如何实现此功能。由于该篇接上篇写的&#xff1a;jQuery实现响应式瀑布流效果&#xff08;jQueryflex&#xff09;_jquery瀑布流插件-CSDN…

驾驶未来:百度Apollo自动驾驶技术的探索与实践(文末赠送apollo周边)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 粉丝福利活动 ✅参与方式&#xff1a;通过连接报名观看课程&#xff0c;即可免费获取精美周边 ⛳️活动链接&#xf…

Java之Synchronized与锁升级

Synchronized与锁升级 一、概述 在多线程并发编程中 synchronized 一直是元老级角色&#xff0c;很多人都会称呼它为重量级锁。但是&#xff0c;随着 Java SE 1.6 对 synchronized 进行了各种优化之后&#xff0c;有些情况下它就并不那么重了。 本文详细介绍 Java SE 1.6 中为…

智能算法(GA、DBO等)求解阻塞流水车间调度问题(BFSP)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

七天搞定java接口自动化测试实战,一文搞定...

前言 无论是自动化测试还是自动化部署&#xff0c;撸码肯定少不了&#xff0c;所以下面的基于java语言的接口自动化测试&#xff0c;要想在业务上实现接口自动化&#xff0c;前提是要有一定的java基础。 如果没有java基础&#xff0c;也没关系。这里小编也为大家提供了一套jav…

Gaussian-Splatting 训练并导入Unity中

这个周末玩点啥~&#x1f41e; &#x1f354;资源下载&#x1f365;环境安装&#x1f4a1;安装C编译工具&#x1f4a1;安装Python&#x1f4a1;安装CUDA&#x1f4a1;添加ffmpeg到环境变量Path&#x1f4a1;pytorch安装&#x1f4a1;tqdm 安装&#x1f4a1;diff-gaussian-raste…

元素的显示与隐藏(常用)

场景&#xff1a;类似网站广告&#xff0c;当我们点击关闭就不见了&#xff0c;但是我们重新刷新页面&#xff0c;会重新出现&#xff01; 本质&#xff1a;让一个元素在页面中隐藏或者显示出来。 1. display 显示隐藏元素 但是不保留位置 2. visibility 显示隐藏元素 但是保留…

luceda ipkiss教程 53:在版图上加中文

要在版图上加中文&#xff0c;如&#xff1a; 可以通过如下方法实现&#xff1a; 首先&#xff0c;可以在ppt中加入文本框&#xff0c;在文本框中输入想要加到版图上的中文内容&#xff0c;如&#xff0c;复旦大学&#xff0c;并将文本框存为windows位图。 其次&#xff0c;通…

智能优化算法应用:基于金豺算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于金豺算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于金豺算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.金豺算法4.实验参数设定5.算法结果6.参考文献7.MA…

在Redis客户端设置连接密码 并演示密码登录

我们先连接到Redis服务 然后 我们要输入 CONFIG SET requirepass “新密码” 例如 CONFIG SET requirepass "A15167"这样 密码就被设置成立 A15167 我们 输入 AUTH 密码 例如 AUTH A15167这里 返回OK说明成功了 然后 我们退出在登录就真的需要 redis-cli -h IP地…

C语言沉浸式刷题【C语言必刷题】

1.猜凶手 某地发生了一起谋杀案&#xff0c;警察通过排查确定杀人凶手必为四个嫌疑犯的一个&#xff0c;以下是4个嫌犯的供词。已知&#xff08;请编写代码找出凶手&#xff09; A说&#xff1a;不是我。 B说&#xff1a;是C。C说&#xff1a;是D。D说&#xff1a;C再胡说。 程…

从0开始python学习-35.allure报告企业定制

目录 1. 搭建allure环境 2. 生成报告 3. logo定制 4. 企业级报告内容或层级定制 5. allure局域网查看 1. 搭建allure环境 1.1 JDK&#xff0c;使用PyCharm 找到pycharm安装目录找到java.exe记下jbr目录的完整路径&#xff0c;eg: C:\Program Files\JetBrains\PyCharm Com…

1.数字反转

题目 AC import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();if(n>0) {StringBuilder str new StringBuilder();str.append(n);StringBuilder str1 str.reverse();String st…

猫头虎带您探索Go语言的魅力:GoLang程序员必备的第三方库大盘点 ‍ ‍

猫头虎带您探索Go语言的魅力&#xff1a;GoLang程序员必备的第三方库大盘点 ‍ &#x1f680;&#x1f431;‍&#x1f4bb; 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#x…

2024-AI人工智能学习-安装了pip install pydot但是还是报错

2024-AI人工智能学习-安装了pip install pydot但是还是报错 出现这样子的错误&#xff1a; /usr/local/bin/python3.11 /Users/wangyang/PycharmProjects/studyPython/tf_model.py 2023-12-24 22:59:02.238366: I tensorflow/core/platform/cpu_feature_guard.cc:182] This …

MySQL的事务-原子性

MySQL的事务处理具有ACID的特性&#xff0c;即原子性&#xff08;Atomicity)、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;和持久性&#xff08;Durability&#xff09;。 1. 原子性指的是事务中所有操作都是原子性的&#xff0c;要…

【论文解读】CNN-Based Fast HEVC Quantization Parameter Mode Decision

时间&#xff1a;2019 年 级别&#xff1a;SCI 机构&#xff1a;南京信息工程大学 摘要 随着多媒体呈现技术、图像采集技术和互联网行业的发展&#xff0c;远程通信的方式已经从以前的书信、音频转变为现在的音频/视频。和 视频在工作、学习和娱乐中的比例不断提高&#xff0…

Kubectl 部署有状态应用(下)

接上文 《Kubectl 部署有状态应用&#xff08;上&#xff09;》创建完StatefulSet后&#xff0c;本文继续介绍StatefulSet 扩展、更新、删除等内容。 StatefulSet 中的 Pod 验证序数索引和稳定的网络身份 StatefulSet 中的 Pod 具有唯一的序数索引和稳定的网络身份。 查看 …