C/C++(C++类型增强)
C++类型增强
类型检查更严格
把一个const类型的指针赋给非const类型的指针。c语言中可以通的过,但是在c++中则编不过去
const int a = 10;
a = 100;//const修饰的不能修改
int *p = &a;
*p = 100;
printf("a = %d\n",a);//a = 100,c里面类型不严密,指针能修改const修饰的变量,实际是a是const int *类型,也就是说强行的赋给int *,把const漏掉了。
const int a与int const a一样,看const修饰谁把类型去掉。
int *const p;把int去掉,p不能改变,p指向的内容可以改变。
const int *const p;它指向的本身和内容都不能改变。
#include<iostream>
using namespace std;
int main() {
const int a = 100;//const修饰的必须要初始化
int *p = &a;//不可以报错 const int *无法转化成int *;
const int *p = &a;//才是正确的
//C++不需要强转
char *p = malloc(100);//C++会报错
char *q = (char*)malloc(100);//void *
return 0;
}
布尔类型(bool)
c 语言的逻辑真假用 0 和非 0 来表示。而 c++中有了具体的类型。
int main()
{
bool flag = true;
if(flag)
printf("hello world!\n");
else
printf("hello C++!\n");
return 0;
}
真正的枚举(enum)
c 语言中枚举本质就是整型,枚举变量可以用任意整型赋值。而 c++中枚举变量,只能用被枚举出来的元素初始化。
bool用枚举实现过程:
#include<iostream>
enum BOOL
{
FALSE,TURE
};
int main()
{
const int a = 100;
BOOL flag = TRUE;
bool aa = true;
if(flag)
cout<<a;
printf("sizeof(flag) = %d sizeof(BOOL) = %d sizeof(bool) = %d\n",sizeof(flag),sizeof(BOOL),sizeof(bool));
}
//sizeof(flag) = 4 sizeof(BOOL) = 4 sizeof(bool) = 1
//enum枚举本质是整型
它和即将所学的string类型并不是实际意义上的数据类型而是一个对象。
enum SEASOM
{
Spr,Sum,Autu,Win
};
int main()
{
SEASON s;
s = Win;//在C++中比较严格,除了枚举外的无法赋值。c里面就可以赋其他值。
return 0;
}
其实枚举可以和宏来等价
#define Spr 0
#define Sun 1
....
enum
{
Spr = 1,Sum,Autu,Win
};
在C++中经可能的使用枚举,const代替使用宏。
表达式的值可被赋值
c:
int main()
{
int a,b=10;
a = b = 100;//100赋值给b,b = 100这个表达式赋值给a。
(a = b) = 100;//错误,表达式是不可被赋值的
(a != b?a:b) = 1000;//错误
return 0;
}
c++
int main()
{
int a,b = 5;
(a = b) = 100;
printf("a = %d b = %d\n",a,b);
(a != b?a:b) = 1000;
printf("a = %d b = %d\n",a,b);
return 0;
}
//a = 100,b = 5;
//a = 1000,b = 5
//a = b是一个表达式,b的值赋值给a,最后把100的值赋值给a,b的值没发生变化。
体现C++对C语言的限制与提升
cin cout类对象
scanf printf函数的功能相同
int main()
{
char name[30];
scanf("%s",name);//不安全的输入,输入很多会挂机
fgets(name,30,stdin);//最多只能输入29个字符,比较安全。
cin>>name;//>>流输入运算符
cout<<"name = "<<name<<endl;
//"name = "字符串流入cout对象,name流入cout对象,endl(换行)流入cout对象中,从左至右的顺序。
string name1;
cin>>name1;
cout<<name1;
//很安全,输多少都不会挂机
cin>>a>>b;//有顺序,从键盘输入的第一个数流入a,第二个数流入b
//<=>
cin>>a;
cin>>b;
return 0;
}
C/C++(C++类型增强)的更多相关文章
- C++笔记十二:C++对C的扩展——struct关键字类型增强
C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型. C++中的struct是一个新类型的定义声明. struct Student { char name[100]; int ...
- C++中struct类型增强
struct类型的加强: C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型. C++中的struct是一个新类型的定义声明. demo struct Student { ch ...
- 不用typsescript也能使用类型增强功能
由于 JS 的弱类型.宽松的编写规范.以及开发工具的弱鸡支持,我们在维护前人的代码时,经常会出现不知道某一个方法或字段命名来自于哪里,一定要在全局搜索以后慢慢筛查才能找到 同样我们在使用接口返回的对象 ...
- 03C++语言对C的增强——实用性、变量检测、struct类型、C++中所有变量和函数都必须有类型、bool类型、三目运算符
1.“实用性”增强 C语言中的变量都必须在作用域开始的位置定义,C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义. 2.C++对c语言register的增强 register关键字 ...
- C++语言对C的增强(1)——实用性、变量检测、struct类型、C++中所有变量和函数都必须有类型、bool类型、三目运算符
1.“实用性”增强 C语言中的变量都必须在作用域开始的位置定义,C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义. 2.变量检测加强 在C语言中,重复定义多个同名的全局变量是合法的: ...
- 如何增强 Linux 系统的安全性,第一部分: Linux 安全模块(LSM)简介
http://www.ibm.com/developerworks/cn/linux/l-lsm/part1/ 1.相关背景介绍:为什么和是什么 近年来Linux系统由于其出色的性能和稳定性,开放源代 ...
- 【Spring-AOP-学习笔记-7】@Around增强处理简单示例
阅读目录 简单介绍 章节1:项目结构 章节2:定义切面类.连接点注解类 章节3:为待增强的方法--添加注解声明 章节4:AspectJ配置文件 章节5:测试类xxx 章节6:测试结果 Around 增 ...
- SAP HR模块的基础数据表和增强配置
信息类型是SAP HR模块数据单元,用于对人员数据的记录和维护,是HR的基础.信息类型按照其创建方式的不同可以分为:人事信息类型.组织信息类型.信息类型数据的维护主要在事物码PA30.PA40.po1 ...
- SAP 常用增强记录文档
转自:http://blog.csdn.net/budaha 20170215需要一个PR 修改保存时候的增强,目的是同步PR的处理状态 EBAN-STATU 到一个自建表ZTPRTOPO,记得有个P ...
随机推荐
- 【codeforces 46C】Hamsters and Tigers
[题目链接]:http://codeforces.com/problemset/problem/46/C [题意] 给你一个长度为n的01串; 让你把所有的0放在一起,把所有的1放在一起; (即0都是 ...
- mayan 游戏 search
纯搜索,,,模拟,,还不算太难,,就是细节略繁琐 首先因为题目要求保证字典序,所以显然把右边的块换到左边不如把左边的块换到右边优, 所以可以进行不小规模的剪枝,之后显然交换两块相同的色块没有意义,至此 ...
- Qt之布局管理器
简述 Qt的布局系统提供了一个简单的和强有力的方式,来自动排列窗口子控件布局. 所有QWidget子类可以使用布局来管理他们的子控件.QWidget::setLayout()函数可以为一个控件布局.当 ...
- oracle 登录
命令行登录 sql plus登录 plsql登录 自己电脑登录 既然是登录自己电脑的数据库,肯定是已经安装过了oralce,而且已经创建了数据库等等. 局域网登录 1.必须安装oracleclient ...
- C++的IO操作
#include <iostream> using namespace std; int main() { char name[20]; char gend ...
- java匿名内部类的使用注意事项
1.首先匿名内部类要继承自抽象基类或者实现基类接口 like this abstract class Seed{ int cnt; public Seed(int x){ cnt=x; } abstr ...
- LIMIT语句解析及本章简单回顾(二十九)
一.LIMIT 限制查询结果返回的数量 [LIMIT {[offset,] row_count | row_count OFFSET offset}] select * from user; 除了可以 ...
- 使用WinNTSetup安装win10时提示efi part有红叉(win10安装UEFI系统安装)
1.装载ImDisk虚拟磁盘 2.格式化硬盘 *格式化时注意”创建新ESP分区 3.使用 WinNTSetup 选择win10安装程序 *1. “BOOTMGR PBR "后有感叹号不用管, ...
- mongodb 的数据备份与恢复
导入/导出可以操作是本地的或远程的,所以都有以下通用选项[如果是操作本地机并且没有密码的话可以省去]: 1.-h host 主机 ...
- ajax+h5实现文件上传,成功即显示缩略图。
官方参考文档: http://fex.baidu.com/webuploader/ 文件下载地址: https://github.com/fex-team/webuploader/releases/d ...