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 429D】Tricky Function
[题目链接]:http://codeforces.com/problemset/problem/429/D [题意] 给你n个数字; 让你求出一段区间[l,r] 使得 (r−l)2+(∑rl+1a[i ...
- mysql给某字段随机赋特定范围的整数值
[引] mysql中随机生成一些范围内的整数有时候是很有用的,用到了2个函数 1.floor(f) 返回一个不大于f的最大整数 2.rand(),rand(n) 返回一个随机浮点值 v ,范围在 0 ...
- Qt5的插件机制(1)--Qt 框架中的插件载入机制概述
概述 Qt的源代码中通过 Q<pluginType>Factory.Q<pluginType>Plugin 和 Q<pluginType> 这三个类实现了Qt的插件 ...
- BZOJ 1088 水模拟
BZOJ水一道~ 枚举前两个位置是否放雷,模拟向下推.能够则ans++ #include "stdio.h" #include "string.h" int a ...
- 32.AngularJS 表达式
转自:https://www.cnblogs.com/best/tag/Angular/ AngularJS 表达式写在双大括号内:{{ expression }}. AngularJS 表达式把数据 ...
- Vue Syntax Highlight
Vue Syntax Highlight https://github.com/vuejs/vue-syntax-highlight
- Dictionaries and tuples
Dictionaries have a method called items that returns a list of tuples, where each tuple is a key-val ...
- python-logging写日志编码问题
python-logging写日志编码问题 标签(空格分隔): python 修改logging.FileHandler() 指定编码格式为:utf8 重新运行
- LINQ返回DataTable类型 list转dataset 转换为JSON对象
using System.Web.Script.Serialization; using System.Collections.Generic; using System.Reflection; us ...
- c# IndexOf()用法
IndexOf()用法 查找字符串中字符或者字符串首次出现的位置,返回的是索引值; str1.indexOf('字');//查找“字”在字符串中首次出现的索引值 str1.indexOf(" ...