02 类型、结构体⚓︎
约 686 个字 50 行代码 预计阅读时间 4 分钟
类型⚓︎
基本类型:
int var = 114514;
,32 位(64 位 Windows)char ch = 'Q';
,8 位float val1 = 19.19;
,32 位double val2 = 81.0;
, 64 位bool bVal = true;
,1 位std::string str = "NoughtQ";
void
编译型语言 VS 解释型语言⚓︎
C++ 是静态类型语言:代码中所有带名称的实体(变量、函数等)需要在运行前确定类型。
而以 Python 为代表的语言是动态类型语言:代码中所有带名称的实体,在运行时会根据它们当前的值来确定类型。
上述这两类语言分别称为编译型(compiled)语言和解释型(interpreted)语言,它们之间最主要的区别是:源代码何时被翻译。
- 动态类型 - 解释型:在执行过程中逐行检查类型
- 静态类型 - 编译型:在程序运行前的编译过程中确定类型
例子
如何编译 C++ 程序
命令:g++ -std=c++11 hello.c -o hello
其中-std=c++11
指明编译器参照的 C++ 版本,若省略 -o hello
,输出文件名为a.out
函数重载⚓︎
在 C++ 中,虽然无法定义多个相同的函数,但我们可以重载(overload)某个函数,使其有多种版本,也就是说可以定义函数名相同,但参数类型、参数个数或返回值类型不同的函数。
例子
int half(int x, int div = 2) // C++ 允许设置默认参数值
{
return x / div;
}
double half (double x)
{
return x / 2;
}
half(4)
\(\rightarrow\)2
half(3, 3)
\(\rightarrow\)1
half(3.0)
\(\rightarrow\)1.5
结构体⚓︎
静态类型语言的缺点:
- 弄清变量的类型可能是一件很痛苦的事
- 任何函数只能有一种返回类型
- C++ 原语(primitives)的有限性
关键字 auto
⚓︎
关键字 auto
可解决第一个问题——它用作具体类型的替代,让编译器自己推断具体的类型。
何时使用auto
?
当上下文的语境能够明确类型,或者类型写起来很麻烦的时候(比如下面的std::pair
auto
是明智之举。
结构体⚓︎
后两个问题可由结构体(struct
)来解决。它是一个带名称的变量的组,每个变量都有自己的类型,允许程序员将不同的类型结合。
应用
STL 有自己的结构体std::pair
,它是一个由两个任意类型的字段构成的内部结构体。
std::pair
是一个模板,可在<>
里面指定字段的类型std::pair
的字段名分别为first
和second
std::pair
等价于下面的结构体:
应用
std::pair<bool, Student> lookupStudent(string name)
{
Student blank;
if (notFound(name))
return std::make_pair(false, blank);
Student result = getStudentWithName(name);
return std::make_pair(true, result);
}
auto output = lookupStudent("NoughtQ");
- 使用
std::make_pair
方法可以避免指明pair
内的字段类型,提升敲代码的效率。 - 调用函数将返回值赋给某个变量时,变量的类型可设为
auto
,理由同上。
评论区
如果大家有什么问题或想法,欢迎在下方留言~