码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C11新特性——auto、decltype类型指示符


    1、auto类型说明符

    (1)auto是让编译器通过初始值来推算变量的类型,因此auto定义的变量必须要有初始值。
    (2)auto可以在一条语句中声明多个变量,其中多个边的初始基本数据类型必须一样。
    (3)auto 会忽略掉顶层的const,保留底层的const。
    例如:

    int i=0;
    
    const int a=i;
    auto b=a;//这里的b是一个int类型,a的顶层const特性被忽略掉了
    
    auto c=&a;//这里的c是指向整数常量的指针,因此保留了底层的const.(对常量对象取地址是一种底层const)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (4) 设置一个类型为auto 的引用时,初始值中的顶层常量属性仍然保留。
    例如:

    auto &d=a;//d是对整型常量的引用
    
    • 1

    2、decltype 类型指示符

    (1)decltype能够从表达式的类型推断出要定义的变量的类型,所以不一定用该表达式的值初始化变量。
    例如:编译器并不需要调用某个函数,而是可以通过该函数的返回类型来确定需要定义的变量的类型。
    (2)如果decltype使用的表达式是一个变量,则decltype返回该变量的类型(包括顶层const和引用在内)。
    例如:

    const int a=0,&b=a;
    
    decltype(a) x = 0;//x的类型是const int
    decltype(b) y = x;//y的类型是const int& 
    
    • 1
    • 2
    • 3
    • 4

    (3)decltype和引用之间需要注意的问题:
    ①如果decltype使用的表达式不是一个变量,那么decltype返回表达式结果对应的类型。
    ②如果表达式的内容是解引用操作,则decltype的结果是引用类型。
    原因是:解引用指针可以得到指针所指的对象,而且还能给这个对象赋值,所以decltype(*p)的结果是int&,而非int.
    例如:

    int i=1,*p=&i,&r=i;
    
    decltype(r+1) b;//b是未初始化的int类型
    decltype(*p) c;//c是int&,必须初始化
    
    • 1
    • 2
    • 3
    • 4

    ③decltype的表达式如果是加上了括号的变量,结果将是引用。
    原因是:加上括号,编译器会把它当成一个表达式,变量是一种可以作为赋值语句左值的特殊表达式,所以 这样的decltype就会得到引用类型。
    例如:

    decltype((i)) d;//编译出错,因为d是int&,必须初始化
    decltype(i) e;//e是一个未初始化的int
    
    • 1
    • 2
  • 相关阅读:
    维基百科是如何定义联合办公空间的?
    【操作系统笔记二】链接阶段&ELF文件
    R语言ggplot2可视化:使用ggpubr包的ggballoonplot函数可视化分面气球图(可视化由两个分类变量组成的列联表)、facet参数指定分面变量
    记一次 .NET 某数控机床控制程序 卡死分析
    个人网页设计成品DW静态网页 HTML网页设计结课作业 web课程设计网页规划与设计 Web大学生个人网页成品 web网页设计期末课程大作业
    C#:变量的更多内容
    在EC2上对SELinux故障进行紧急恢复以及排查的思路及方法
    2023 柏鹭杯 --- Crypto fractrsa wp
    推荐几款比较使用的idea插件
    操作系统缓冲区管理(单缓冲,双缓冲,循环缓冲,缓冲池)
  • 原文地址:https://blog.csdn.net/m0_54355780/article/details/125509459
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号