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