C++ 关键字

news2024/12/25 8:52:34

bool

取值

true和false,只有二者,C++编译器会在赋值时将非0值转换为true,0转换为false

ture

代表真值,编译器内部用1来表示

false

代表非真值,编译器内部用0来表示

空间

占用一个字节

多个bool变量定义在一起,可能会各占一个bit,取决于编译器的实现

const

#include<iostream>

int main(void)

{ //const 定义常量--->const 意味只读

const int a;

int const b;//第一个第二个意思一样 代表一个常整形数

const int *c;//常量指针,常量的指针,指向常量的指针 第三个 c是一个指向常整形数的指针

(所指向的内存数据不能被修改,但是本身可以修改)

*c是常量,是右值

c的指向可以随意改变,但是所指向的内容不能通过c改变,本身存储的地址可以改变,但是地址里面的数据不可以被改变,即不可以根据解引用改变

int * const d;//指针常量,指针的常量,指针本身就是一个常量,是指针,也同时也是一个常量

第四个 d 常指针

(指针变量不能被修改,但是它所指向内存空间中的数据可以被修改)

指针的指向一旦确定,就不能改变,本身存储的地址不可以改变,但是地址里面的数据可以改变,可以通过d来改变,即可以通过解引用改变

const int * const e;//第五个 e一个指向常整形的常指针 (指针和它所指向的内存空间 ,均不能被修改)

return 0;

}

顶层 const

表示指针本身就是一个常量,它的指向不能改变,但是指向的对象的值可以改变。

int *const a;

可以表示任意的对象是常量,对任何数据类型均适用。

底层 const

表示指针所指的对象是一个常量,它的指向可以改变,但是不能通过解引用改变对象的值。

const int *b;

与指针、引用等复合类型的基本类型部分有关。

特殊的是,指针既可以是顶层 const ,也可是底层 const 。

用于声明引用的 const 都是底层 const 。

拷贝

顶层 const 不会对拷贝有影响,因为执行拷贝操作不会改变被拷贝对象的值,所以拷入和拷出的对象是否是常量没有影响。

底层 const 会对拷贝产生影响,执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层 const 资格,或者两个对象的数据类型必须能够转换,一般来说,非常量可以换成常量,反之不行。

合理的利用const的好处

1.指针做函数参数,可以有效的提高代码可读性,减少bug;

2.清楚的分清参数的输入和输出特性

int setTeacher_err(const Teacher*p)

const修改形参的时候,在利用形参不能修改指针所向的内存空间。

const和#define的异同

#include<iostream>

#define N 10

int main()

{

const int a=1;

const int b=2;

int array[a+b]={0};

int i=0;

for(i=0;i<(a+b);i++)

{

printf("array[%d]=%d\n",i,array[i]);

}

return 0;

}

C++中的cconst修饰的,是一个真正的常量,而不是C中变量(只读)。在const修饰的常量编译期间,就已经确定下来了。

#include<iostream>

void fun1()

{

#define a 10

const int b=20;

}

void fun2()

{

printf("a=%d\n",a);

//printf("b=%d\n",b);

}

int main()

{

fun1();

fun2();

return 0;

}

C++中的const常量类似于宏定义

const int c=5; #define c 5

C++中的const常量与宏定义不同

const常量是由编译器处理的,提供类型检查和作用域检查宏定义由预处理器处理,单纯的文本替换

宏定义在预处理阶段执行

C

const变量是只读变量,有自己的存储空间

C++

可以分配存储空间,也可能不分配存储空间

当const常量为全局,并且需要在其它文件中使用,会分配存储空间

当使用&操作符,取const常量的地址时,会分配存储空间

当const int &a=10;const修饰引用时,也会分配存储空间

常量表达式

指值不会改变并且在编译过程中就能得到计算结果的表达式【字面值、用常量表达式初始化的 const 对象】。

constexpr 变量

将变量声明为 constexpr 类型,该变量一定是一个变量,并且必须用变量表达式初始化。

普通函数不能作为 constexpr 变量的初始值,constexpr 函数可以,该函数应该足够简单使得编译时就可计算出结果。

字面值类型

比较简单,值显而易见、容易得到的类型被称为字面值类型。包括算术类型、引用和指针。

虽然指针和引用都能定义成 constexpr ,但是初始值受到严格限制,constexpr 指针的初始值必须是 nullptr 或 0 ,或是存储于某个固定地址中的对象。

函数体内定义的变量一般并非存放在固定的地址中,constexpr 不能指向这样的变量,定义于所有函数体之外的对象的地址固定不变,可初始化 constexpr 指针。允许函数定义一类有效范围超出函数本身的变量【静态局部变量】,该类变量和定义在函数体之外的变量一样有固定地址,constexpr 引用能绑定到这样的变量上,constexpr 指针也能指向这样的变量。

constexpr 指针

在 constexpr 声明中如果定义一个指针,限定符 constexpr 仅对指针有效,与指针所指的对象无关。

const int *p = nullptr;//p 是一个指向整型常量的指针

constexpr int *q = nullptr;//q 是一个指向整数的常量指针

constexpr 把它所定义的对象置为顶层 const 。

constexpr 指针既可指向一个常量,也可指向一个非常量。

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

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

相关文章

Power BI 傻瓜入门 13. 进入仪表板

本章内容包括&#xff1a; 配置仪表板将报表功能集成到仪表板中使用基于AI的功能增强仪表板体验基于仪表板规则定义警报 想象一下&#xff1a;图片和文本的混合体整齐地组织起来&#xff0c;就像一块美丽的画布。它告诉你组织中的一切都在顺利运行&#xff0c;但其中一个视觉…

Linux系统之部署Tale个人博客系统

Linux系统之部署Tale个人博客系统 一、Tale介绍1.1 Tale简介1.2 Tale特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查java版本 四、部署Tale个人博客系统4.1 下载Tale源码4.2 查看Tale源码目录4…

干货 | 深度多元时序模型在携程关键指标预测场景下的探索应用

作者简介 doublering&#xff0c;携程高级算法工程师&#xff0c;关注自然语言处理、LLMs、时序预测等领域。 一、背景 互联网行业中&#xff0c;有许多关键指标直接影响公司未来的规划与决策&#xff0c;比如流量、订单量、销售额等。有效地预测这些关键指标能够辅助公司提前做…

C++类模板再学习

之前已经学习了C类模板&#xff1b;类模板的写法和一般类的写法有很大的差别&#xff1b;不容易熟悉&#xff1b;下面再做一遍&#xff1b; 做一个椭圆类&#xff0c;成员有长轴长度和短轴长度&#xff1b; // ellipse.h: interface for the ellipse class. // //#if !define…

Android开发知识

文章目录 HTTPHTTP到底是什么HTTP的工作方式URL ->HTTP报文List itemHTTP的工作方式请求报文格式&#xff1a;Request响应报文格式&#xff1a;ResponseHTTP的请求方法状态码HeaderHostContent-TypeContent-LengthTransfer: chunked (分块传输编码 ChunkedTransfer Encoding…

双向链表的初始化、插入、删除

双向链表的初始化 双向链表的插入 双向链表的删除 我们可以看看这一题循环双向链表的题目 王道p40 17.设计一个算法用于判断带头结点的循环双链表是否对称&#xff08;c语言代码实现&#xff09;_认真敲代码的小火龙的博客-CSDN博客https://blog.csdn.net/m0_46702681/article…

Shiro整合EhCache

缓存工具EhCache EhCache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。可以和大部分Java项目无缝整合&#xff0c;例如&#xff1a;Hibernate中的缓存就是基于EhCache实现的。EhCache支持内存和磁盘存储&#xff0c;默认存储在内存中&#xff…

netcore webapi action 同时支持 get 和 post 请求

最近在项目开发过程中&#xff0c;有个别接口需要同时支持GET和POST请求&#xff0c;经过一番测试&#xff0c;貌似NetCore只能接收指定的FromBody、FromQuery等参数&#xff0c;经过一番查找后发现文章&#xff1a;为ASP.NET Core实现一个自适应ModelBinder&#xff0c;让Acti…

HackTheBox-Starting Point--Tier 1---Sequel

文章目录 一 题目二 实验过程 一 题目 Tags Vulnerability Assessment、Databases、MySQL、SQL、Reconnaissance、Weak Credentials译文&#xff1a;漏洞评估、数据库、MYSQL、SQL、侦察、凭证薄弱Connect To attack the target machine, you must be on the same network.C…

QT 中 Graphics View 程序例子-Diagram Scene Example

一、 概况 本例演示如何使用图形视图框架。 “图表场景”示例是一个应用程序&#xff0c;您可以在其中创建流程图。可以添加流程图形状和文本&#xff0c;并通过箭头连接形状&#xff0c;如上图所示。形状、箭头和文本可以赋予不同的颜色&#xff0c;并且可以更改文本的字体、…

HackTheBox-Starting Point--Tier 1---Crocodile

文章目录 一 题目二 实验过程 一 题目 Tags Web、Network、Custom Applications、Protocols、Apache、FTP、Reconnaissance、Web Site Structure Discovery、Clear Text Credentials、Anonymous/Guest Access译文&#xff1a;Web、网络、定制应用程序、协议、Apache、FTP、侦…

C++项目——云备份-③-实用工具类设计与实现

文章目录 专栏导读1.文件实用工具类的设计2.文件实用工具类的实现2.1前置知识补充2.1.1struct stat 与 stat介绍2.1.2std::experimental::filesystem认识 2.2FileUtil实现 3.JSON实用工具类的设计4.JSON实用工具类的实现5.实用工具类整理 专栏导读 &#x1f338;作者简介&#…

ESP32智能小车+PS2无线遥控器+麦克纳姆轮+microPython

from machine import Pin,PWM from ps2 import PS2Controller import time import os# ############################################# # PS2 遥控器 # ############################################# ps2ctl PS2Controller(di_pin_no26, do_pin_no27, cs_pin_no14, clk_pin…

Unity中Shader的模型网格阴影

文章目录 前言一、网格阴影原理1、在世界空间下&#xff0c;把角色模型在Y轴上压缩成一个面片&#xff0c;把颜色修改成像影子的颜色2、把压缩后的面片&#xff0c;移动到合适的位置&#xff0c;把模型和阴影面片错开3、实现距离脚近的阴影偏移少&#xff0c;距离脚远的阴影偏移…

【已解决】AttributeError: module ‘cv2‘ has no attribute ‘bgsegm‘

问题 使用cv2.bgsegm.createBackgroundSubtractorMOG()去除背景的时候&#xff0c;遇到如下问题&#xff1a; AttributeError: module cv2 has no attribute bgsegm原因 报错原因&#xff1a;使用的python环境中没有安装扩展包contrib 解决方法 可以通过pip或者conda安装 …

QT中文乱码解决方案与乱码的原因

相信大家应该都遇到过中文乱码的问题&#xff0c;有时候改一改中文就不乱码了&#xff0c;但是有时候用同样的方式还是乱码&#xff0c;那么这个乱码到底是什么原因&#xff0c;又该如何彻底解决呢&#xff1f; 总结 先总结一下&#xff1a; Qt5中&#xff0c;将QString()的构…

Java实现Csv文件导入导出

Java实现Csv文件导入导出 什么是.csv文件&#xff1f; CSV&#xff08;Comma-Separated Values&#xff0c;逗号分隔的值&#xff09;是一种简单、实用的文件格式&#xff0c;用于存储和表示包括文本、数值等各种类型的数据。CSV 文件通常以 .csv 作为文件扩展名。这种文件格…

基于蜣螂优化算法DBO优化的VMD-KELM光伏发电短期功率预测MATLAB代码

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; VMD适用于处理非线性和非平稳信号&#xff0c;例如振动信号、生物信号、地震信号、图像信号等。它在信号处理、振动分析、图像处理等领域有广泛的应用&#xff0c;特别是在提取信号中的隐含信息和去除噪声方面…

字符串中的strcpy和strncpy区别

strcpy:函数原型是char *strcpy(char* dest, const char *src)&#xff0c;含义是将src中的字符串复制到dest中。 strncpy:函数原型是char *strncpy(char *dest const char *src,int n&#xff09;&#xff0c;表示把src所指向的字符串中以src地址开始的前n个字节复制到dest所…

香港施政报告人才引进政策2023全面解读,对优才计划申请是否有影响?

香港施政报告人才引进政策2023全面解读&#xff0c;对优才计划申请是否有影响&#xff1f; 香港第二份施政报告10月25日出来了&#xff01;这次真的是“走进民生”啊&#xff0c;什么路都帮你想好了&#xff01; 总结就是&#xff1a;继续抢人才、留人才&#xff01;在昨天的《…