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++类型增强)的更多相关文章

  1. C++笔记十二:C++对C的扩展——struct关键字类型增强

    C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型. C++中的struct是一个新类型的定义声明. struct Student { char name[100]; int  ...

  2. C++中struct类型增强

    struct类型的加强: C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型. C++中的struct是一个新类型的定义声明. demo struct Student { ch ...

  3. 不用typsescript也能使用类型增强功能

    由于 JS 的弱类型.宽松的编写规范.以及开发工具的弱鸡支持,我们在维护前人的代码时,经常会出现不知道某一个方法或字段命名来自于哪里,一定要在全局搜索以后慢慢筛查才能找到 同样我们在使用接口返回的对象 ...

  4. 03C++语言对C的增强——实用性、变量检测、struct类型、C++中所有变量和函数都必须有类型、bool类型、三目运算符

    1.“实用性”增强 C语言中的变量都必须在作用域开始的位置定义,C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义. 2.C++对c语言register的增强 register关键字 ...

  5. C++语言对C的增强(1)——实用性、变量检测、struct类型、C++中所有变量和函数都必须有类型、bool类型、三目运算符

    1.“实用性”增强 C语言中的变量都必须在作用域开始的位置定义,C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义. 2.变量检测加强 在C语言中,重复定义多个同名的全局变量是合法的: ...

  6. 如何增强 Linux 系统的安全性,第一部分: Linux 安全模块(LSM)简介

    http://www.ibm.com/developerworks/cn/linux/l-lsm/part1/ 1.相关背景介绍:为什么和是什么 近年来Linux系统由于其出色的性能和稳定性,开放源代 ...

  7. 【Spring-AOP-学习笔记-7】@Around增强处理简单示例

    阅读目录 简单介绍 章节1:项目结构 章节2:定义切面类.连接点注解类 章节3:为待增强的方法--添加注解声明 章节4:AspectJ配置文件 章节5:测试类xxx 章节6:测试结果 Around 增 ...

  8. SAP HR模块的基础数据表和增强配置

    信息类型是SAP HR模块数据单元,用于对人员数据的记录和维护,是HR的基础.信息类型按照其创建方式的不同可以分为:人事信息类型.组织信息类型.信息类型数据的维护主要在事物码PA30.PA40.po1 ...

  9. SAP 常用增强记录文档

    转自:http://blog.csdn.net/budaha 20170215需要一个PR 修改保存时候的增强,目的是同步PR的处理状态 EBAN-STATU 到一个自建表ZTPRTOPO,记得有个P ...

随机推荐

  1. 【codeforces 429D】Tricky Function

    [题目链接]:http://codeforces.com/problemset/problem/429/D [题意] 给你n个数字; 让你求出一段区间[l,r] 使得 (r−l)2+(∑rl+1a[i ...

  2. mysql给某字段随机赋特定范围的整数值

    [引] mysql中随机生成一些范围内的整数有时候是很有用的,用到了2个函数 1.floor(f) 返回一个不大于f的最大整数 2.rand(),rand(n) 返回一个随机浮点值 v ,范围在 0  ...

  3. Qt5的插件机制(1)--Qt 框架中的插件载入机制概述

    概述 Qt的源代码中通过 Q<pluginType>Factory.Q<pluginType>Plugin 和 Q<pluginType> 这三个类实现了Qt的插件 ...

  4. BZOJ 1088 水模拟

    BZOJ水一道~ 枚举前两个位置是否放雷,模拟向下推.能够则ans++ #include "stdio.h" #include "string.h" int a ...

  5. 32.AngularJS 表达式

    转自:https://www.cnblogs.com/best/tag/Angular/ AngularJS 表达式写在双大括号内:{{ expression }}. AngularJS 表达式把数据 ...

  6. Vue Syntax Highlight

    Vue Syntax Highlight https://github.com/vuejs/vue-syntax-highlight

  7. Dictionaries and tuples

    Dictionaries have a method called items that returns a list of tuples, where each tuple is a key-val ...

  8. python-logging写日志编码问题

    python-logging写日志编码问题 标签(空格分隔): python 修改logging.FileHandler() 指定编码格式为:utf8 重新运行

  9. LINQ返回DataTable类型 list转dataset 转换为JSON对象

    using System.Web.Script.Serialization; using System.Collections.Generic; using System.Reflection; us ...

  10. c# IndexOf()用法

    IndexOf()用法 查找字符串中字符或者字符串首次出现的位置,返回的是索引值; str1.indexOf('字');//查找“字”在字符串中首次出现的索引值 str1.indexOf(" ...