把一個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; }