Loading docs/lang/var.md +18 −12 Original line number Diff line number Diff line Loading @@ -107,9 +107,11 @@ C++ 中类型的转换机制较为复杂,这里主要介绍对于基础数据 - 整数转换为浮点数时,会舍入到目标类型下最接近的值。 - 将其他类型转换为 `bool` 类型时,零值转换为 `false` ,非零值转换为 `true` 。 ## 声明变量 ## 定义变量 使用关键词加上变量名即可声明。 简单地说[^note2],定义一个变量,需要包含类型说明符(指明变量的类型),以及要定义的变量名。 例如,下面这几条语句都是变量定义语句。 ```c++ int oi; Loading @@ -117,38 +119,38 @@ double wiki; char org = 'c'; ``` 在目前我们所接触到的程序段中,声明在花括号包裹的地方的变量是局部变量,而声明在没有花括号包裹的地方的变量是全局变量。实际有例外,但是现在不必了解。 在目前我们所接触到的程序段中,定义在花括号包裹的地方的变量是局部变量,而定义在没有花括号包裹的地方的变量是全局变量。实际有例外,但是现在不必了解。 声明时没有初始化值的全局变量会被初始化为 0。而局部变量没有这种特性,需要手动赋初始值,否则可能引起难以发现的 bug。 定义时没有初始化值的全局变量会被初始化为 0。而局部变量没有这种特性,需要手动赋初始值,否则可能引起难以发现的 bug。 ## 变量作用域 作用域是变量可以发挥作用的代码块。 变量分为全局变量和局部变量,意义已经在上面讲解。 全局变量的作用域是整个文件,全局变量一旦声明,在整个程序中都是可用的。 全局变量的作用域,自其定义之处开始[^note3],至文件结束位置为止。 局部变量的作用域是声明语句所在的代码块,局部变量只能被函数内部或者代码块内部的语句使用。 局部变量的作用域,自其定义之处开始,至代码块结束位置为止。 由一对大括号括起来的若干语句构成一个代码块。 ```c++ int g = 20; // 声明全局变量 int g = 20; // 定义全局变量 int main() { int g = 10; // 声明局部变量 int g = 10; // 定义局部变量 printf("%d\n", g); // 输出 g return 0; } ``` 在一个代码块中,局部变量会覆盖掉同名的全局变量,比如上面的代码输出的 g 就是 10 而不是 20。为了防止出现意料之外的错误,请尽量避免局部变量与全局变量重名的情况。 如果一个代码块的内嵌块中定义了相同变量名的变量,则内层块中将无法访问外层块中相同变量名的变量。 例如上面的代码中,输出的 $g$ 的值将是 10。因此为了防止出现意料之外的错误,请尽量避免局部变量与全局变量重名的情况。 ## 常量 常量是固定值,在程序执行期间不会改变。 常量的值在定义后不能被修改。声明时加一个 `const` 关键字即可。 常量的值在定义后不能被修改。定义时加一个 `const` 关键字即可。 ```c++ const int a = 2; Loading @@ -160,3 +162,7 @@ a = 3; ## 参考资料与注释 [^note1]: 自 C++20 起生效。C++20 前结果是实现定义的。详见 [整型转换 - cppreference](https://zh.cppreference.com/w/cpp/language/implicit_conversion#.E6.95.B4.E5.9E.8B.E8.BD.AC.E6.8D.A2) 。 [^note2]: 定义一个变量时,除了类型说明符之外,还可以包含其他说明符。详见 [声明 - cppreference](https://zh.cppreference.com/w/cpp/language/declarations) 。 [^note3]: 更准确的说法是 [声明点](https://zh.cppreference.com/w/cpp/language/scope#.E5.A3.B0.E6.98.8E.E7.82.B9) 。 Loading
docs/lang/var.md +18 −12 Original line number Diff line number Diff line Loading @@ -107,9 +107,11 @@ C++ 中类型的转换机制较为复杂,这里主要介绍对于基础数据 - 整数转换为浮点数时,会舍入到目标类型下最接近的值。 - 将其他类型转换为 `bool` 类型时,零值转换为 `false` ,非零值转换为 `true` 。 ## 声明变量 ## 定义变量 使用关键词加上变量名即可声明。 简单地说[^note2],定义一个变量,需要包含类型说明符(指明变量的类型),以及要定义的变量名。 例如,下面这几条语句都是变量定义语句。 ```c++ int oi; Loading @@ -117,38 +119,38 @@ double wiki; char org = 'c'; ``` 在目前我们所接触到的程序段中,声明在花括号包裹的地方的变量是局部变量,而声明在没有花括号包裹的地方的变量是全局变量。实际有例外,但是现在不必了解。 在目前我们所接触到的程序段中,定义在花括号包裹的地方的变量是局部变量,而定义在没有花括号包裹的地方的变量是全局变量。实际有例外,但是现在不必了解。 声明时没有初始化值的全局变量会被初始化为 0。而局部变量没有这种特性,需要手动赋初始值,否则可能引起难以发现的 bug。 定义时没有初始化值的全局变量会被初始化为 0。而局部变量没有这种特性,需要手动赋初始值,否则可能引起难以发现的 bug。 ## 变量作用域 作用域是变量可以发挥作用的代码块。 变量分为全局变量和局部变量,意义已经在上面讲解。 全局变量的作用域是整个文件,全局变量一旦声明,在整个程序中都是可用的。 全局变量的作用域,自其定义之处开始[^note3],至文件结束位置为止。 局部变量的作用域是声明语句所在的代码块,局部变量只能被函数内部或者代码块内部的语句使用。 局部变量的作用域,自其定义之处开始,至代码块结束位置为止。 由一对大括号括起来的若干语句构成一个代码块。 ```c++ int g = 20; // 声明全局变量 int g = 20; // 定义全局变量 int main() { int g = 10; // 声明局部变量 int g = 10; // 定义局部变量 printf("%d\n", g); // 输出 g return 0; } ``` 在一个代码块中,局部变量会覆盖掉同名的全局变量,比如上面的代码输出的 g 就是 10 而不是 20。为了防止出现意料之外的错误,请尽量避免局部变量与全局变量重名的情况。 如果一个代码块的内嵌块中定义了相同变量名的变量,则内层块中将无法访问外层块中相同变量名的变量。 例如上面的代码中,输出的 $g$ 的值将是 10。因此为了防止出现意料之外的错误,请尽量避免局部变量与全局变量重名的情况。 ## 常量 常量是固定值,在程序执行期间不会改变。 常量的值在定义后不能被修改。声明时加一个 `const` 关键字即可。 常量的值在定义后不能被修改。定义时加一个 `const` 关键字即可。 ```c++ const int a = 2; Loading @@ -160,3 +162,7 @@ a = 3; ## 参考资料与注释 [^note1]: 自 C++20 起生效。C++20 前结果是实现定义的。详见 [整型转换 - cppreference](https://zh.cppreference.com/w/cpp/language/implicit_conversion#.E6.95.B4.E5.9E.8B.E8.BD.AC.E6.8D.A2) 。 [^note2]: 定义一个变量时,除了类型说明符之外,还可以包含其他说明符。详见 [声明 - cppreference](https://zh.cppreference.com/w/cpp/language/declarations) 。 [^note3]: 更准确的说法是 [声明点](https://zh.cppreference.com/w/cpp/language/scope#.E5.A3.B0.E6.98.8E.E7.82.B9) 。