文章目錄
1 變量定義的位置可以隨用隨定義
對於變量定義的位置可以隨用隨定義
#include <iostream>
using namespace std;
int main(void){
int i = 10;
for(int i = 0; i < 10; i++){
cout << "i = " << i << endl;
}
return 0;
}
c語言早期版本不支持隨用隨定義
2 對全局變量的檢測能力加強
int g_val;
// int g_val = 10; error: Redefinition of 'g_val'
int main(void){
return 0;
}
一個變量不管是聲明還是定義,只能出現一次
3 使用struct時 不需要再使用struct關鍵字
struct teacher{
int age;
char name[64];
};
int main(void){
teacher t1;
//c語言中必須使用 struct teacher t1; 否則報錯:Must use 'struct' tag to refer to type 'teacher'
return 0;
}
4 新增bool類型
#include <iostream>
using namespace std;
int main(void){
//1 bool類型的值爲0或1
bool flag = true;
cout << " flag = " << flag << endl;
//2 bool類型佔一個字節
cout << "sizeof(flag) = " << sizeof(flag) << endl;
//3 給bool類型賦值非0的值,他的值都爲1
flag = 10;
cout << "flag = " << flag << endl;
}
打印結果
flag = 1
sizeof(flag) = 1
flag = 1
5 const的增強
5.1 不能通過指針間接修改常量值
#include <iostream>
int main(void){
//1 c++中的const,確實對a起了保護作用, 不能通過指針間接改變a的值
const int a = 10;
int *p = (int*)&a;
// c語言中可以通過指針的間接賦值改變const的值
*p = 20; //此時*p改變的是臨時變量的值,而不是a的值
printf("a = %d\n", a);
return 0;
}
輸出結果
a = 10
5.2 另外引申出const的一些基礎知識
//1 常整型數
const int a;
//2 常整型數
int const b;
//3 c是一個指向常整數的指針(所指向的內存數據不能被修改,但是本身可以修改)
int const * c;
//4 d常指針(指針變量不能被修改,但是它所指向內存空間可以被修改)
int * const d;
//5 指向常整型的常指針(指針和它指向的內存空間,均不能被修改)
const int * const e;
示例:
#include <iostream>
int main(void){
//1 常整型數
const int a = 10;
//a = 5;//error:Cannot assign to variable 'a' with const-qualified type 'const int'
//2 常整型數
int const b = 20;
//b = 20;//error:Cannot assign to variable 'b' with const-qualified type 'const int'
//3 c是一個指向常整數的指針
int c_value = 30;
const int *c = &c_value;
printf("*c = %d\n",*c);
//本身可以修改
c = &b;
printf("*c = %d\n",*c);
//指向的內存數據不能修改
//*c = 40; error:Read-only variable is not assignable
//4 d常指針
int d_value = 50;
int * const d = &d_value;
*d = 60;
//指向的內存的值可以修改
printf("d_value = %d\n", d_value);
// 本身不可以修改
//d = &c_value; //error:Cannot assign to variable 'd' with const-qualified type 'int *const'
return 0;
}
輸出結果
*c = 30
*c = 20
d_value = 60
5.3 c語言中的const是冒牌貨
本來是想記錄一下,C語言中的const是個冒牌貨,但實際上C語言中也不併不能修改const修飾的變量的值。
理論上C語言中是能通過指針間接修改const修飾的變量的值的,但是我實際上測試是並不能
int main(void){
const int a = 10;
printf("a = %d\n", a);
int *p = &a;
*p = 20;
int array[a] ={10,20};
printf("a = %d\n", a);
printf("*p = %d\n", *p);
printf("array[1] = %d\n", array[1]);
return 0;
}
打印結果
a = 10
a = 10
*p = 20
array = 20
6 枚舉加強
c語言中枚舉的本質就是整型,枚舉變量可以用任意整形賦值
c++ 中不能直接把int值賦給enum類型,只能用枚舉元素初始化
#include <iostream>
using namespace std;
enum season{
SPR,
SUM,
AUT,
WIN
};
int main(void){
enum season s = SPR;
cout << "s = " << s << endl;
// s = 0; error:Assigning to 'enum season' from incompatible type 'int'
s = SUM;
cout << "s = " << s << endl;
return 0;
}
打印結果
s = 0
s = 1
7 命名空間
7.1 命名空間的使用
(1) 直接用std::cout 方式
#include <stdio.h>
#include <iostream>
int main(void){
std::cout << "hello world" << std::endl;
return 0;
}
輸出結果
Hello world
(2) 使用using namesapce std 方式
using namespace std;
int main(void){
cout << "Hello world" << endl;
return 0;
}
輸出結果
Hello world
(3) 使用std::cout
using std::cout;
int main(void){
cout << "Hello world" << std::endl;
return 0;
}
輸出結果
Hello world
7.2 自定義命名空間
(1) 定義一個命名空間
namespace China {
int peopleSize = 14;
}
using namespace std;
int main(void){
using namespace China;
std::cout << " China::peopleSize = " << China::peopleSize<< std::endl;
return 0;
}
輸出結果
China::peopleSize = 14
(2) 命名空間嵌套
namespace China {
int peopleSize = 14;
namespace HeiBei{
int peopleSize = 5;
}
}
using namespace std;
int main(void){
using namespace China;
std::cout << " China::HeiBei::peopleSize = " << China::HeiBei::peopleSize<< std::endl;
return 0;
}
輸出結果
China::HeiBei::peopleSize = 5
8 C++中所有變量和函數都必須有類型
(1) c++中類型檢測加強
#include <iostream>
// c++中函數不加返回值類型報錯 error:Unknown type name 'f'
// c++中函數參數不加類型報錯 error:Unknown type name 'i'
f(i){
printf("i = d% \n",i);
};
(2) 在c語言中 int f() 表示接收任意參數的函數
void f_2(){
printf("method f_2()\n");
};
int main(void){
f_2(10);
return 0;
}
輸出結果
method f_2()
(3) c語言中,int f(void)表示無參函數
void f_3(void){
printf("method f_3(void)\n");
}
int main(void){
// f_3(10); error: Too many arguments to function call, expected 0, have 1
return 0;
}
c++中,int f() 和 int f(void)具有相同的意義,都表示返回值爲int的無參函數
9 三目運算符功能增強
- C語言中三目運算符返回變量的值,所以不可以作爲左直
- C++語言返回的是變量本身,所以可以作爲左值
#include <iostream>
int main(void){
int a = 10;
int b = 20;
int min_value = 0;
(a < b ? a : b) = 30;
printf("a = %d,b = %d \n", a, b);
return 0;
}
輸出結果
a = 30,b = 20
原理:C++編譯器做了一個取地址的操作
*(a < b ? &a : &b) = 30;