古银有了个人博客了:小古银的官方网站
auto
auto 曾经有一种很古老的用法,但是已经很久很久很久没人用了,那种古老的用法已经被废弃了,取而代之的是新功能:
自动类型推导。
自动类型推导很
简单,而且很
常用。他根据等号右边的值推导出变量的类型。
注意:C++是强类型语言(意思是所有变量在编译成程序前已经确定好类型和大小),所以auto定义的变量必须初始化,根据初始值类型确定变量的类型和大小。
int main(void)
{
// auto 定义变量并根据初始化时, 等号右边的类型推导出变量类型
auto a = 123; // 变量a的类型是int
auto b = 1.234; // 变量b的类型是double
short c = 12;
auto d = c; // 因为变量c是short, 所以变量d的类型是short
// auto 的作用:
// 相对于 long long var = ...
// 少写了几个字母
auto var = 10'0000'0000'0000'0000;
// 以下是 auto 的错误用法, 因为C++是强类型语言
// 而变量e没有初始值所以推导不出类型
// 因此产生编译错误
// auto e;
return 0;
}
decltype
当变量不需要或者不能初始化(
写程序时建议变量初始化)但需要和其他某个变量类型一致时,使用decltype关键字。
(decltype常用在不知道类型的变量上(类型在编译时还是知道的。。。有点矛盾 - -),例如很后面很后面将要介绍的 模板 (如果有空写的话。。。))
int main(void)
{
// auto 定义变量并根据初始化时, 等号右边的类型推导出变量类型
// decltype 根据圆括号内变量的类型定义新的变量
auto a = 123; // 变量a的类型是int
auto b = 1.234; // 变量b的类型是double
short c = 12;
auto d = c; // 因为变量c是short, 所以变量d的类型是short
decltype(a) e; // 因为变量a类型是int, 所以e的类型也是int
decltype(c) f; // 因为变量c类型是short, 所以f的类型也是short
decltype(f) g = 23; // 因为变量f类型是short, 所以g的类型也是short
return 0;
}
常量
常量指程序不能改变的固定值。
int main(void)
{
// 数字都是常量, 因为数字都是固定值
1;
2;
0;
1.234;
return 0;
}
类型后缀
在数值后面加上后缀,来说明数值的类型。
注意:类型后缀不区分大小写。
int main(void)
{
// 类型后缀跟在数值后面, 用于说明数值的类型
// 类型后缀不区分大小写
11L; // 11被说明成long
auto var0 = 11; // 变量var0的类型是 int
auto var1 = 11L; // 变量var1的类型是 long
auto var2 = 22ll; // 22LL, 变量var2的类型是 long long
auto var3 = 33u; // 变量var3的类型是 unsigned int
auto var4 = 4.0f; // 变量var4的类型是 float
auto var5 = 5.0; // 变量var5的类型是 double
auto var6 = 66.6L; // 变量var6的类型是 long double
return 0;
}
const
const 型的变量不能被程序修改,然而能被赋予初始值。
当 const 型变量被初始化一个常量后,该 const 型变量相当于一个常量。
const int a = 10; // 可以将 a 看作一个常量
int main(void)
{
const int a = 10; // 常量a
const int b = a; // 常量, const int b = 10;
int c = 66;
c = 44;
/*
这里省略一堆对c的赋值
c = ....
*/
// 因为c不是常量, 所以d不是常量, const int d;
// 好处在于当 d 不需要被修改时, 加 const 防止后面写代码误操作
const auto d = c;
return 0;
}
const 的作用:
- 对不需要改变的变量加 const,可以防止写代码时不小心手抖了一下,改变了某个变量的值。当试图改变 const 变量的值时,编译器编译时报错。
- 当程序多个地方需要同一个相同的数时,用 const 在适当的地方定义变量保存,以后修改就不需要改几处代码,而且编译器会优化常量。