c++——增强了(全局变量、变量和函数的都要有类型、类型转换、struct结构体、bool类型和三目运算符)

news/2024/11/17 3:05:47/

c++中全局变量、变量和函数的都要有类型、类型转换、struct结构体、bool类型和三目运算符的增强

一、c++全局变量的增强

1、在C语言中全局变量的声明和定义

//全局变量
int a;//定义
int a;//声明
int a;//声明

相同变量,第一个是定义,后面的的变量a都是声明;
2、在c++中的全局变量

//全局变量
int a;
extern int a;//第二个及以后a变量得加上extern
extern int a;

二、c++中所有变量和函数都要有类型

1、c语言中的函数的形参类型可以不写,没有返回值可以返回,实参的个数不做检测

2、c++语言中的函数的形参类型必须写,没有返回值不可以返回,实参的个数做检测
①变量的类型:
在C++中,每个变量都必须有一个类型,指定了变量可以存储的数据的种类。例如,整数变量、浮点数变量、字符变量等都需要指定其相应的类型。类型还决定了变量的大小、范围和可以执行的操作。

int myInteger = 42;       // 整数变量
double myDouble = 3.14;   // 浮点数变量
char myChar = 'A';        // 字符变量

②函数类型
函数也有类型,被称为函数的返回类型。返回类型指定了函数执行后返回的值的类型。函数的参数列表和返回类型共同构成了函数的类型特征,也称为函数签名。

int add(int a, int b) {return a + b;
}double divide(double x, double y) {return x / y;
}

C++是一种强类型语言,这意味着变量和表达式的类型在编译时就必须被明确定义,而且在大多数情况下不会自动进行隐式的类型转换。这有助于避免在程序中出现意外的类型错误。

三、c++中有严格得类型转换

两边的类型要一致
1、隐式类型转换(自动类型转换):
隐式类型转换是指在某些情况下,编译器会自动进行的类型转换,而不需要显式地指定。例如,将整数赋值给浮点数或将字符赋值给整数时,编译器会自动进行类型转换。然而,这种隐式转换可能会导致精度损失或不可预期的行为。

2、显式类型转换(强制类型转换):
C++提供了几种显式类型转换操作符,可以在代码中明确指定需要进行的类型转换。这些操作符分别是:static_cast、dynamic_cast、const_cast和reinterpret_cast。尽管这些操作符允许开发人员更灵活地控制类型转换,但在使用时需要谨慎,以免引入潜在的错误。

char *p = molloc(10);//左边是char *型,右边是void *
//此时要强制转换
char *p = (char *)malloc(10);

四、在c++中队struct的增强

在c++中使用结构休类型时,可以不写struct关键宁
1、C语言中的struct

struct stu{int a;double b;
};
void test(){struct stu obj;
}

2、c++中的struct

struct stu{int a;double b;
};
void test(){stu obj;//可以不用写struct
}

3、c和c++中struct的主要区别:
c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private。

五、c++中增加了bool类型

C++引入了布尔(bool)类型作为基本的逻辑类型,用于表示真(true)或假(false)的值。布尔类型在编程中经常用于控制流程、条件判断和逻辑运算。C++中的布尔类型提供了更加清晰和直观的逻辑表达方式。
1、布尔类型的声明和赋值:
在C++中,布尔类型只有两个可能的值:true和false。可以使用关键字bool来声明布尔类型的变量,并将其赋值为true或false。

bool isTrue = true;
bool isFalse = false;

2、布尔类型的逻辑运算:
布尔类型可以进行逻辑运算,如与(&&)、或(||)和非(!)等。这些逻辑运算符用于组合和比较布尔值。

bool a = true;
bool b = false;bool resultAnd = a && b;  // 逻辑与运算
bool resultOr = a || b;   // 逻辑或运算
bool resultNot = !a;      // 逻辑非运算

六、c++对三目运算符的增强

1、在c语言中三目运算符
返回的是一个常量

int a = 10;
int b = 20;
printf("%d\n", a < b ? a : b);//

2、在c++中的三目运算符

还可以返回一个变量

int a = 10;
int b = 20;
printf("%d\n", a < b ? a : b);
(a < b ? a : b) = 100;//此时左边返回的是一个变量,所以能进行赋值

3、在C语言中左边也要是想返回一个变量

int a = 10;
int b = 20;
printf("%d\n", a < b ? a : b);
*(a < b ? &a : &b) = 100;//此时返回的是变量

http://www.ppmy.cn/news/1050033.html

相关文章

【LeetCode-中等题】128. 最长连续序列

题目 题解一&#xff1a;HeshSet枚举 思路&#xff1a;先对数组进行set去重&#xff0c;核心就是&#xff0c;先找出临界值&#xff08;假设以最小临界为例&#xff0c;那么这个临界值自己就是最小值&#xff0c;&#xff09;&#xff0c;以临界值不断做加1操作&#xff0c;看…

来自西安交大的chisel教程

第零章 序 Chisel教程汇总__iChthyosaur的博客-CSDN博客 来自西安交大的chisel教程 出过书

R语言数据整理技巧(1)-读写、数据类型、重构

1、读取和写入数据&#xff1a;xlsx&#xff1b;txt; rdata pathC:\\Users setwd(path) #读取 #读取csv read.csv(.csv) #读取txt read.txt(.txt) #读取剪贴板 read.table("clipboard") #读取xlsx library(readxl) read_xlsx(.xlsx) #读取rdata文件 load(.radta) #写…

vue-router在vue2/3区别

构建选项区别 vue2-router const router-new VueRouter({mode:history,base:_name,})vue-next-router import { createRouter,createWebHistory} from vue-next-router const routercreateRouter({history:createHistory(/) })在上述代码中我们发现,vue2中的构建选项mode和ba…

代码随想录day11

20. 有效的括号 ● 力扣题目链接 ● 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串&#xff0c;判断字符串是否有效。 ● 有效字符串需满足&#xff1a; ● 左括号必须用相同类型的右括号闭合。 ● 左…

数学建模-规划工具箱yalmip

官网下载 实例 %% yalmip 求解 yalmip clc;clear;close all; %% %sdpvar实型变量 intvar 整形变量 binvar 0-1型变量 psdpvar(3,1); %定义变量 %目标函数 要把求最大值转化为最小值 Objective-p(1)^2p(2)^2-p(2)*p(3);%约束条件 Constraints[0<p<1,(p(1)^2p…

功能性需求与非功能性需求的区别

如果你曾经负责过软件项目开展的全过程&#xff0c;就会知道需求定义在项目后期的重要性。清晰、明确的需求定义不仅有助于有效地管理客户期望&#xff0c;也有助于指导项目的顺利开展。 在项目前期阶段&#xff0c;如果需求定义不清晰&#xff0c;就会导致项目范围和成果定义…

clickhouse的ttl

TTL 只能在MergeTree系列表中使用&#xff0c;和分区一样&#xff0c;也只能在mergetree系列表中用 列: 当列的时间超过设置的值 -整列数据被删除 表: 当表中的某个写行的时间超过设置的值 -整行会被删除 定义值的存储时间。只能为MergeTree系列表指定。确定值的生存期。 当…