变量和基本类型


#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;



posted @ 2022-03-06 10:37  W-forever  阅读(36)  评论(0)    收藏  举报