1. 程式人生 > 其它 >變數和基本型別

變數和基本型別


#include <iostream>

//一個使用io輸入輸出物件
void test();
int main() {
	std::cout << "Enter two numbers" << std::endl;
	int v1 = 10;
	int v2 = 0;
	std::cin >> v1 >> v2;
	std::cout << v1 + v2 << std::endl;
	test();
	return 0;
}

extern double pi = 2.141; //定義

void test() {
	unsigned u = 10;
	int i = -42;
	//把負數轉化為無符號數類似於直接給無符號數賦一個負值,結果等於這個負數加上無符號數的模
	std::cout << i + i << std::endl;
	std::cout << i + u << std::endl;

	unsigned u1 = 42, u2 = 10;
	std::cout << u1 - u2 << std::endl;
	std::cout << u2 - u1 << std::endl;
	//但從無符號數中減去一個值時,不管這個值是不是無符號數,我們都必須確保結果不能是一個負值

	//宣告和定義(變數只可以被定義一次,但是可以被多次宣告)
	extern int i; //宣告i而非定義i
	int j; //宣告並定義j
	//extern double pi = 3.1416; 錯誤:不允許對外部變數的區域性宣告使用初始值設定項(初始化)

}

void yingYong() {
	int val = 1024;
	int& refVal = val;
	//int &refVal2; 報錯,引用必須被初始化,引用型別的初始化必須為一個物件
	//解引用操作適用於那些確實指向了某個物件的有效指標

	//指向指標的引用
	int i = 42;
	int* p;
	int*& r = p;
	r = &i; //將p指向i
	*r = 0; //

	const int i = 42;//const物件必須初始化

	//const的引用
	const int ci = 1024;
	const int& r = ci;
	//不可以讓一個非常量的引用指向一個常量物件 int &r2 = ci;


	//指標常量 該指標指向的值不可以修改;常量指標 指標指向的物件不可以修改
	//頂層const 指標本身是一個常量,底層const指標所指向的物件是一個常量
	int i = 0;
	const int ci = 42;
	const int* p1 = &ci;
	const int* const p2 = p1;
	
	
	//constexpr宣告中如果定義了一個指標,限定符constexpr僅對指標有效,與指標所指向的物件無關
	const int* p = nullptr;
	constexpr int* q = nullptr;


	int i = 0, & r = i;
	auto a = r; //自動型別推導

	const int ci = 0, & cj = ci;
	decltype(ci) x = 0; //x的型別是const int
	decltype(cj) y = x; //y的型別是const int&

	//decltype((i)) d; 錯誤,d是int&,必須初始化
	decltype(i) e;