下面我将详细讲解 C++ 入门的几个重要知识点:命名空间、缺省参数、函数重载、引用、内联函数、auto、范围 for。
命名空间
命名空间可以理解为一种管理代码作用域的方式,它将变量、函数、类等标识符组织在一个作用域中,避免了不同命名空间的标识符之间的命名冲突。例如:
#include<iostream>
using namespace std;
namespace my_namespace {
int num = 10;
void print() {
cout << "Hello from my_namespace!" << endl;
}
}
int main() {
cout << "Global num: " << num << endl; // 输出全局变量num
cout << "Namespace num: " << my_namespace::num << endl; // 输出my_namespace中的num
my_namespace::print(); // 调用my_namespace中的print函数
return 0;
}
上述代码中,我定义了一个名为 my_namespace
的命名空间,并在其中定义了一个变量 num
和一个函数 print
,并且我在 main()
函数中使用了该命名空间中的变量与函数。
缺省参数
C++ 中的函数可以定义缺省参数,这些参数在调用函数时如果不提供实参,将使用默认值。例如:
#include<iostream>
using namespace std;
void func(int x, int y = 10) {
cout << "x=" << x << ", y=" << y << endl;
}
int main() {
func(5);
func(3, 7);
return 0;
}
上述代码中,我定义了一个名为 func
的函数,并且为其第二个参数定义了一个缺省参数值 10。在 main()
函数中,我分别调用 func
函数并传入一个实参与两个实参,分别会输出 x=5, y=10
和 x=3, y=7
。
函数重载
C++ 允许我们定义同名函数,只要它们的参数列表不同,称之为函数的重载。例如:
#include<iostream>
using namespace std;
void add(int x, int y) {
cout << x << " + " << y << " = " << x + y << endl;
}
void add(double x, double y) {
cout << x << " + " << y << " = " << x + y << endl;
}
int main() {
add(2, 3);
add(2.1, 3.4);
return 0;
}
上述代码中,我定义了两个名为 add
的函数,分别接受两个 int
类型与两个 double
类型的参数。由于函数的参数列表不同,两个函数之间不存在命名冲突。
引用
C++ 允许我们定义引用类型,它是一个已定义变量的别名,可以访问原始变量的值并进行修改。例如:
#include<iostream>
using namespace std;
int main() {
int x = 10;
int &ref = x; // 定义引用类型ref,指向x
ref = 20; // 修改ref引用的变量x的值
cout << "x=" << x << ", ref=" << ref << endl;
return 0;
}
上述代码中,我定义了一个变量 x
,并定义了一个引用类型 ref
,将 ref
指向 x
,并且我在修改 ref
的值时,也相当于修改原始变量 x
的值。最终输出 x=20, ref=20
。
内联函数
C++ 中的内联函数通过将函数体直接嵌入到程序中,以取代函数调用过程中的额外开销,从而提高程序运行效率。例如:
#include<iostream>
using namespace std;
inline int add(int x, int y) {
return x + y;
}
int main() {
cout << "2 + 3 = " << add(2, 3) << endl;
cout << "5 + 7 = " << add(5, 7) << endl;
return 0;
}
上述代码中,我使用 inline
关键字定义了一个名为 add
的内联函数,inline
会让编译器在编译时将该函数体嵌入到程序中,从而避免了函数调用过程中的额外开销,并提高了程序运行效率。
auto
C++11 引入了一个新特性 auto
,它可以让编译器在编译时自动推断出变量的类型。例如:
#include<iostream>
using namespace std;
int main() {
auto x = 10; // 自动推断出x为int类型
auto y = 3.14; // 自动推断出y为double类型
auto z = "Hello"; // 自动推断出z为const char*类型
cout << "x=" << x << ", y=" << y << ", z=" << z << endl;
return 0;
}
上述代码中,我使用 auto
定义了三个不同的变量,编译器会根据变量初始化时的值自动推断出其类型。
范围 for
C++11 引入了一个新特性 范围 for
,它可以简化数组、容器或字符串的遍历过程。例如:
#include<iostream>
#include<vector>
using namespace std;
int main() {
int arr[] = {1, 2, 3, 4, 5};
vector<int> vec = {6, 7, 8, 9, 10};
string str = "Hello, World!";
// 使用范围 for 遍历数组
for (auto x : arr) {
cout << x << " ";
}
cout << endl;
// 使用范围 for 遍历容器
for (auto x : vec) {
cout << x << " ";
}
cout << endl;
// 使用范围 for 遍历字符串
for (auto ch : str) {
cout << ch;
}
cout << endl;
return 0;
}
上述代码中,我分别定义了一个数组、一个容器和一个字符串,并使用 范围 for
分别遍历它们的元素,并输出到标准输出流中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++入门(命名空间,缺省参数,函数重载,引用,内联函数,auto,范围for) - Python技术站