C++初学者指南第一步---8.类型系统(基础)

C++初学者指南第一步—8.类型系统(基础)

文章目录

  • C++初学者指南第一步---8.类型系统(基础)
    • 1.用const声明常量
    • 2.类型别名
    • 3.类型推导 auto
    • 4.常量表达式:constexpr (C++11)

1.用const声明常量

语法:

Type const variable_name = value;
类型 const 变量名 = 值
  • 值一经分配就无法更改
  • 初始值可以是动态的(= 在运行时设置)
int i = 0;
cin >> i;
int const k = i;  // "整形常量"
k = 5;  //  编译错误: k是const!

注意:如果你不需要在初始赋值后改变变量的值,总是将变量声明为const !

  • 避免错误:如果稍后不小心更改值,则不会编译。
  • 有助于更好地理解代码:清楚地传达值在代码中将保持不变。
  • 可以提高性能(可能进行更多编译器优化)

2.类型别名

语法:

using NewType = OldType;  //C++11
typedef OldType NewType;  //C++98
using real = double;
using ullim = std::numeric_limits<unsigned long>;
using index_vector = std::vector<std::uint_least64_t>;

注意:比起过时且模棱两可的类型定义,我们更喜欢更强大的using(稍后我们将看到原因)!

3.类型推导 auto

语法:

auto variable = expression;
  • 从赋值符右侧推导出的变量类型。
  • 通常更方便、更安全、更面向未来。
  • 对于泛型(与类型无关)编程也很重要。
auto i = 2;                         // int
auto u = 56u;                       // unsigned int
auto d = 2.023;                     // double
auto f = 4.01f;                     // float
auto l = -78787879797878l;          // long int
auto x = 0 * i;                     // x : int
auto y = i + d;                     // y : double
auto z = f * d;                     // z : double

4.常量表达式:constexpr (C++11)

  • 在编译时必须能够进行计算
  • 如果不在常量表达式上下文中调用,可以在运行时计算
  • 在常量表达式上下文中,所有的表达式本身必须是常量表达式。
  • constexpr 函数可能包含:
    只有一个返回语句 (C++11)
    多个语句 (C++14)
// 两个简单函数:
constexpr int cxf (int i) { return i*2; }int foo (int i) { return i*2; }
constexpr int i = 2;       // OK '2' 是字面量
constexpr int j = cxf(5);  // OK, cxf是常量表达式
constexpr int k = cxf(i);  // OK, cxf 和 i 是常量表达式int x = 0;       // 不是常量表达式int l = cxf(x);  // OK, 不是一个常量表达式上下文
// 常量表达式上下文:
constexpr int m = cxf( x );  // 
constexpr int n = foo( 5 );  // 

附上原文链接
如果文章对您有用,请随手点个赞!^_^
在这里插入图片描述

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

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

相关文章

Python 设计模式(第2版) -- 第二部分(结构型模式)

Python 设计模式(第2版) 然后介绍下结构型设计模式。 下面是一些结构型设计模式的例子&#xff1a; 适配器模式&#xff1a;将一个接口转换成客户希望的另外一个接口。它试图根据客户端的需求来匹配不同类的接口。桥接模式&#xff1a;该模式将对象的接口与其实现进行解耦&a…

[手机Linux PostmarketOS]一,1加6T真正的手机Linux系统

前面用Linux deploy软件安装了Linux系统在手机&#xff0c;实则不是真正的手机刷成了linux系统&#xff0c;而是通过Linux deploy软件在容器里安装了Linux系统&#xff0c;在使用方面会有诸多限制&#xff0c;并不能发挥Linux的真实强大之处&#xff0c;于是我又百度又谷歌(真不…

Docker(四)-Docker镜像

1.概念 镜像是一种轻量级的、可执行的独立软件包&#xff0c;它包含运行某个软件所需的所有内容&#xff0c;我们把应用程序和配置依赖 打包好形成一个可交付的运行环境(包括代码&#xff0c;运行时需要的库&#xff0c;环境变量和配置文件等)&#xff0c;这个打包好的运行环境…

记录锁为什么都加在索引上?

记录锁&#xff08;Record Lock&#xff09;加在索引上的原因主要与数据库的性能优化和数据一致性有关。具体来说&#xff0c;锁加在索引上而不是直接加在数据行上&#xff0c;有以下几个关键原因&#xff1a; 1. 提高查询效率 当锁加在索引上时&#xff0c;数据库可以更高效…

wireshark常见使用表达式

目录 1. 捕获过滤器 (Capture Filters)基本捕获过滤器组合捕获过滤器 2. 显示过滤器 (Display Filters)基本显示过滤器复杂显示过滤器协议特定显示过滤器 3. 进阶显示过滤器技巧使用函数和操作符逻辑操作符 4. 常见网络协议过滤表达式示例HTTP 协议HTTPS 协议DNS 协议DHCP 协议…

Scala入门教程

Scala入门教程可以按照以下步骤进行&#xff0c;以下是详细的内容分点表示和归纳&#xff1a; 一、Scala简介 Scala是一门多范式编程语言&#xff0c;融合了面向对象编程和函数式编程的特性。它运行在Java虚拟机&#xff08;JVM&#xff09;上&#xff0c;因此可以直接使用Ja…

项目经理究竟一年能挣多少钱?一起来看看

作为现代企业中不可或缺的职业之一&#xff0c;“项目经理”对于企业经营具有非常重要的作用。但是关于项目经理的待遇问题&#xff0c;却一直饱受争议。那么&#xff0c;项目经理一般年薪到底有多少钱呢&#xff1f; 一、项目经理年薪概述 根据行业调查和统计数据&#xff0…

【Java】三种实现网络通讯的方式以及相关协议的使用示例

Java网络 - 应用篇 &#x1f47e;以下代码均经过本人实测&#xff0c;请放心食用。顺便求个关注&#xff0c;谢谢&#xff01;&#xff01; 文章目录 Java网络 - 应用篇Socket 篇简介代码实现SockerServerSocketClient RestTemplate 篇简介...ForEntity 与 ...ForObject 对比示…

IPFoxy代理IP:IPv4与IPv6性能与安全性对比

在使用IPFoxy静态代理IP的过程中&#xff0c;经常有小白朋友疑惑&#xff0c;IPv4与IPv6有何区别&#xff1f;他们在性能与安全上的差别如何&#xff0c;又该如何选择&#xff1f;在这篇博文中&#xff0c;我们将从各个方面为您科普这一区别&#xff0c;帮助您更好的选择。 一、…

Bootstrap 间距实用类

Bootstrap 间距实用类&#xff08;Spacing Utilities&#xff09; Bootstrap 提供了一套强大的实用类&#xff0c;用于快速设置元素的 margin 和 padding。这些类名遵循一致的命名规则&#xff0c;支持响应式设计&#xff0c;可以在不同的视口尺寸上进行调整。 1. 基本概念 …

柒拾肆- 如何通过数据影响决策(五)- 时序数据

什么是好&#xff1f; 对于 单一时序指标 来说&#xff08;如最简单的 销售、日活顾客数、订单数 等 &#xff09;&#xff0c;在决策时该怎样 看 呢&#xff1f; 或者换句话说&#xff0c;数据 应该怎样 表达 才能让决策者做出 更全面 的决策呢&#xff1f; 一、目前的方式 …

MPC与DDP结合案例

MPC与DDP结合概要 MPC与DDP的关系 1. 相似性: 优化过程: 都涉及到优化一个代价函数以求得最优控制输入。动态模型: 都依赖于系统的动力学模型来预测和更新系统状态。2. 差异性: 时间尺度: MPC 是在线控制,每次只优化有限预测区间的控制输入,然后在每个时间步长重新优化。D…

Mkdocs中文系列教程补充(1)

什么是requirements.txt 我的理解是mkdocs依赖的py库 第一次建立MKdocs文档使用 mkdocs new . 完后&#xff0c;比较建议执行一下&#xff1a; pip install -r requirements.txt 不然mkdocs serve后会出现什么 xxx not found &#xff0c;比如下面这位老哥 示例 mkdocs …

【C++】循环、控制流语句、

8、循环&#xff08;loops&#xff09;&#xff08;1&#xff09;for loops for循环非常灵活&#xff0c;可以做很多事情。上图红框框出来的代码块就是一个for循环。 for是关键字 for后面内容分为三部分&#xff0c;每部分用分号&#xff1b;隔开 第一部分A是变量的声明&…

Qt入门小项目 | 实现一个图片查看器

文章目录 一、实现一个图片查看软件 一、实现一个图片查看软件 需要实现的功能&#xff1a; 打开目录选择图片显示图片的名字显示图片 在以上功能的基础上进行优化&#xff0c;需要解决如下问题&#xff1a; 如何记住上次打开的路径&#xff1f; 将路径保存到配置文件中&#x…

使用MAT定位线上OOM问题

目录 1.什么是OOM? 2.发生的可能原因 3.常见类型的OOM 4.如何定位问题&#xff1f; 4.1 获取dump文件 4.2 MAT分析 「Leak Suspects」泄露嫌疑 「Histogram」直方图 「dominator tree」支配树 「thread overview」线程视图 目录 1.什么是OOM? 2.发生的可能原因 …

深度学习入门5——为什么神经网络可以学习?

在理解神经网络的可学习性之前&#xff0c;需要先从数学中的导数、数值微分、偏导数、梯度等概念入手&#xff0c;从而理解为什么神经网络具备学习能力。 1.数值微分的定义 先从导数出发理解什么是梯度。某一点的导数直观理解就是在该点的切线的斜率。在数学中导数表示某个瞬…

c#一个udp代码

不使用socket进行 unity下的 private Thread connectThread;private UdpClient udpClient;public Queue LogQueue new Queue();public static UDPManager Instance{get;private set;}private void Awake(){Instance this;}private void Start(){udpClient new UdpClient();…

dolphinscheduler独立集群部署文档(海豚调度)

一、下载解压 服务器内下载&#xff08;华为云镜像站网址&#xff09;&#xff1a; wget https://mirrors.huaweicloud.com/apache/dolphinscheduler/3.2.0/apache-dolphinscheduler-3.2.0-bin.tar.gz解压&#xff1a;tar -xvf apache-dolphinscheduler-3.2.0-bin.tar.gz 改名…