把一个const类型的指针赋给非const类型的指针。c语言中能够通的过,可是在c++中则编不过去ios
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; }
c 语言的逻辑真假用 0 和非 0 来表示。而 c++中有了具体的类型。c++
int main() { bool flag = true; if(flag) printf("hello world!\n"); else printf("hello C++!\n"); return 0; }
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类型并非实际意义上的数据类型而是一个对象。spa
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代替使用宏。code
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++ci
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语言的限制与提高字符串
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; }