1. C++基础概念解析:从域到缺省参数
刚接触C++时,我常被一些基础但关键的概念困扰。今天就来聊聊三个看似简单却容易踩坑的知识点:域(scope)、输入输出(I/O)和缺省参数(default parameters)。这些概念在C++面试和实际项目中频繁出现,理解它们能帮你少走很多弯路。
1.1 什么是域(Scope)?
域决定了变量和函数的可见性和生命周期。在C++中,常见的域类型包括:
- 局部域(Local Scope):在函数或代码块内部定义的变量
- 类域(Class Scope):类定义内部的成员变量和成员函数
- 命名空间域(Namespace Scope):通过namespace关键字定义的命名空间
- 全局域(Global Scope):在所有函数和类之外定义的变量
cpp复制int globalVar = 10; // 全局域
namespace MyNamespace { // 命名空间域
int nsVar = 20;
}
class MyClass { // 类域
public:
int classVar = 30;
};
void myFunction() {
int localVar = 40; // 局部域
{
int blockVar = 50; // 块域
}
}
注意:C++中域解析运算符(::)用于访问全局变量或命名空间成员。当局部变量与全局变量同名时,使用::可以显式访问全局变量。
1.2 输入输出(I/O)系统详解
C++使用流(stream)的概念处理I/O操作。标准库提供了几个关键对象:
- cin:标准输入流(通常对应键盘)
- cout:标准输出流(通常对应屏幕)
- cerr:标准错误流(无缓冲)
- clog:标准日志流(有缓冲)
cpp复制#include <iostream>
#include <string>
int main() {
std::string name;
int age;
std::cout << "请输入您的姓名: ";
std::cin >> name;
std::cout << "请输入您的年龄: ";
std::cin >> age;
std::cout << "您好, " << name << "! 您今年" << age << "岁。" << std::endl;
return 0;
}
格式化输出技巧:
cpp复制#include <iomanip>
// 设置小数位数
std::cout << std::fixed << std::setprecision(2) << 3.14159; // 输出3.14
// 设置输出宽度和对齐方式
std::cout << std::setw(10) << std::left << "Hello"; // 左对齐,宽度10
1.3 缺省参数(Default Parameters)的妙用
缺省参数允许函数在调用时省略某些参数,编译器会自动使用预定义的默认值。这在创建灵活的函数接口时非常有用。
基本语法:
cpp复制// 声明
void printMessage(std::string msg, int times = 1, bool newLine = true);
// 定义
void printMessage(std::string msg, int times, bool newLine) {
for(int i = 0; i < times; ++i) {
std::cout << msg;
if(newLine) std::cout << std::endl;
}
}
// 调用方式
printMessage("Hello"); // 使用全部默认参数
printMessage("Hi", 3); // 只指定前两个参数
prin
