C++整理2
语法规则
1. 命名规则
- 概念:命名规则定义了在代码中如何命名变量、函数、类等标识符。
- 语法:标识符必须以字母或下划线开头,后面可以跟字母、数字或下划线。
- 特点:遵循命名规则可以避免语法错误,提高代码的可读性。
示例代码:
// 正确的命名
int myVariable = 10;
float price_123 = 20.5;
MyClass myClassInstance;
// 错误的命名
int 1stVariable = 10; // 错误:以数字开头
int my-variable = 10; // 错误:包含非法字符
2. 作用域
- 概念:作用域决定了在程序的哪些部分可以访问特定的变量或函数。
- 函数原型作用域:在函数参数列表中定义的变量仅在该函数原型中可见。
- 局部作用域:在函数内部定义的变量仅在该函数内部可见。
- 类作用域:在类定义中声明的成员变量和成员函数仅在该类内部可见。
- 命名空间作用域:在命名空间中定义的名称仅在该命名空间中可见。
示例代码:
void myFunction(int param) { // param只在myFunction的作用域内可见
int localVar = 5; // localVar只在myFunction的作用域内可见
}
class MyClass {
int classVar; // classVar只在MyClass的作用域内可见
public:
void classMethod() {
int localVar = 5; // localVar只在classMethod的作用域内可见
}
};
namespace MyNamespace {
int namespaceVar = 5; // namespaceVar只在MyNamespace的作用域内可见
}
3. 作用域与可见性问题
- 概念:当标识符在不同的作用域中重名时,会发生遮蔽现象,导致外层作用域的标识符在内层作用域中不可见。
- 特点:合理管理作用域和可见性可以避免命名冲突,提高代码的可维护性。
示例代码:
int globalVar = 10; // 全局变量
void function() {
int globalVar = 20; // 局部变量遮蔽了全局变量
std::cout << globalVar << std::endl; // 输出20
}
int main() {
function();
std::cout << globalVar << std::endl; // 输出10,访问全局变量
return 0;
}
4. 关键字使用:改变作用域
- extern:用于声明全局变量或函数,告诉编译器该变量或函数的定义在别的文件或代码区域。
- 使用规则:
extern
通常用于在一个文件中声明另一个文件中定义的全局变量或函数。
- 使用规则:
- static:用于声明局部静态变量或静态成员变量,其生命周期贯穿整个程序,且在该作用域内可见。
- 在C中的使用:
static
变量或函数只能在定义它的文件内访问。 - 在C++中的使用:
static
成员变量和成员函数可以在类的所有对象之间共享。
- 在C中的使用:
extern的使用规则:
// file1.cpp
int a = 42; // 定义一个全局变量a
// file2.cpp
extern int a; // 声明a,告诉编译器a的定义在别处
void function() {
std::cout << a << std::endl; // 安全访问a
}
static在C和C++中的使用:
// C中的静态全局变量
static int staticGlobalVar = 10; // 只能在当前文件中访问
// C++中的静态成员变量
class MyClass {
public:
static int staticMemberVar; // 必须在类外初始化
};
int MyClass::staticMemberVar = 20; // 初始化静态成员变量
void function() {
static int localStaticVar = 30; // 只在function内可见,多次调用只初始化一次
}
这些规则和关键字确保了程序的组织结构和变量的生命周期,使得代码更加模块化和易于管理。
作者:
hwaityd
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。