一、C++程序结构

我们看一个简单代码,它将打印Hello World一词。

#include <iostream>
using namespace std;
int main() {
   cout << "Hello World"; // prints Hello World
   return 0;
}

C++语言定义了几个头文件,其中包含对你的程序必要或有用的信息。对于这个程序需要头文件<iostream>

using namespace std;这一行告诉编译器使用std命名空间命名空间是C++中相对较新的一个添加内容

int main() 是程序执行开始的主函数

cout << “Hello World“; 导致屏幕显示消息“Hello World

return 0; 终止 main() 函数并使其返回值为 0 给调用进程

二、C++命名空间是什么

想象一下,你住在一座大城市这个城市划分不同区域:市中心、住宅区、商业区等等。每个区域都有独特的街道、建筑规则。在这个场景中,每个区域就是一个命名空间,它们提供了独立作用域,允许你在其中声明和使用标识符,而这些标识符名字不同命名空间中可以重复使用,因为它们互相隔离

普通命名空间定义

在C++中,我们可以使用关键字namespace定义命名空间。比如

// 定义名为math的命名空间
namespace math {
    const double PI = 3.14159;

    double areaOfCircle(double radius) {
        return PI * radius * radius;
    }
}

上面的代码定义了一个名为 math 的命名空间。它包含了一个常量 PI 和一个计算圆面积的函数 areaOfCircle

就像城市中的区域可以一步分为子区域一样,命名空间也可以嵌套定义。例如

命名空间的嵌套

namespace university {
    namespace department {
        void displayInfo() {
            std::cout << "Welcome to Computer Science Department!" << std::endl;
        }
    }
}

 这里,我们有一个嵌套的命名空间结构university 是外层命名空间,内部department 命名空间,其中包含了一个显示信息的函数。

命名空间的使用

使用命名空间可以通过两种主要的方式

限定:使用作用解析运算符::访问命名空间中的成员例如

std::cout << "Hello, World!";

university::department::displayInfo();

这里std:: 表示标准命名空间,cout 是其中的一个成员

知识

C++标准库中std 命名空间是什么为什么要使用它?

std 命名空间是 C++ 标准库的命名空间,包含了标准库中的大部分功能、类和对象。使用 std 命名空间可以避免与用户定义的标识符产生冲突,并让代码更具可移植性。要使用标准库的标识符(如 std::coutstd::vector),需要显式地指明其命名空间。

使用指令通过 using 指令将整个命名空间的内容引入当前作用域,例如

using namespace math;

using namespace university::department;

这将使得 math 命名空间中的所有内容当前作用域内可用,但要注意这种方法可能引入命名冲突

示例:使用普通命名空间

现在,让我们结合实际的例子展示命名空间的使用:

#include <iostream&gt;

// 定义名为math的命名空间
namespace math {
    const double PI = 3.14159;

    double areaOfCircle(double radius) {
        return PI * radius * radius;
    }
}

int main() {
    // 使用限定名调用命名空间中的函数
    std::cout << "Area of circle with radius 2: " << math::areaOfCircle(2.0) << std::endl;

    // 使用指令引入命名空间中的常量
    using namespace math;
    std::cout << "Value of PI: " << PI << std::endl;

    return 0;
}

这个示例中,我们展示如何使用限定名来调用命名空间中的函数,以及如何使用 using namespace 指令将命名空间中的常量引入当前作用域。

示例:使用嵌套命名空间

#include <iostream&gt;

namespace university {
    namespace department {
        void displayInfo() {
            std::cout << "Welcome to Computer Science Department!" << std::endl;
        }
    }
}

int main() {
    // 通过限定名调用嵌套命名空间中的函数
    university::department::displayInfo();

    // 使用指令引入嵌套命名空间
    using namespace university::department;
    displayInfo(); // 现在可以直接使用 displayInfo(),因为已经引入了 department 命名空间

    return 0;
}

这个示例中,我们展示了使用限定名和使用指令两种方式来使用嵌套命名空间。通过这些方法,我们可以方便地访问嵌套命名空间中的成员,使得代码具有结构性和可读性。

总的来说,命名空间是C++中一种强大的工具,帮助我们组织管理代码,避免命名冲突提高代码的可读性和可维护性

 三、C++的关键

下面的列表显示了 C++ 中的保留字。这些保留字不得用作常量变量或任何其他标识名称加粗的为C语言关键

asm else new this
auto enum operator throw
bool explicit private true
break export protected try
case extern public typedef
catch false register typeid
char float reinterpret_cast typename
class for return union
const friend short unsigned
const_cast goto signed using
continue if sizeof virtual
default inline static void
delete int static_cast volatile
do long struct wchar_t
double mutable switch while
dynamic_cast namespace template

以下是 C++ 中关键字的解释

编译器优化中,inline 关键字用于编译建议将函数内容直接插入函数调用的地方,而不是进行常规的函数调用。这样的建议通常用于短小的函数,以提高程序的执行效率

1、inline 关键字

1.1 inline 关键字的作用:
  1. 减少函数调用开销: 普通函数的调用涉及堆栈操作参数传递指令跳转等开销,而使用 inline 关键字可以避免这些开销,直接将函数体内容嵌入到调用点处。

  2. 减少函数开销: 函数调用会产生一定的开销,如保存寄存器状态等。将函数内联可以减少这些开销,尤其在多次调用的场景中。

  3. 优化循环和小函数: inline 更适合用于简单的、执行频率高的函数或者循环体,因为在这些情况下,函数调用的开销相对更大。

1.2 影响程序性能因素
  1. 代码膨胀 inline 函数的函数体直接嵌入调用点,可能导致代码的膨胀,增加可执行代码的大小,对缓存和内存占用可能产生影响

  2. 适用范围有限 编译器可能会忽略 inline 关键字的建议,特别是对于复杂的函数、递归函数或函数体过大的情况。因此,即使使用了 inline,也不一定会被编译器完全内联

  3. 编译依赖 编译器对 inline 关键字的处理方式可能因编译器而异,不同编译器可能会有不同优化方式,对程序性能影响也会有所不同。

  4. 用于简短函数: 对于函数体较大、复杂的情况,inline效果可能不如预期,甚至可能因代码膨胀而降低性能

#include <iostream>

// 定义一个简单加法函数
inline int add(int a, int b) {
    return a + b;
}

int main() {
    int x = 5, y = 10;
    int result = add(x, y); // 调用 add() 函数

    std::cout << "Result: " << result << std::endl;
    return 0;
}

总的来说,inline 关键字能够在一定程度上提高程性能,但使用时需慎重考虑函数的大小、调用频率以及编译器的优化能力,避免不必要的代码膨胀,从而达到更好性能优化效果

四、C++ 标识

C++ 标识符是用于标识变量、函数、类、模块或任何其他用户定义项的名称。标识符以字母 A 到 Z 或 a 到 z 或下划线 (_) 开头,后跟零个或多个字母下划线数字(0 到 9)。

C++ 不允许在标识符中使用标点符号,C++ 是一种区分大小写编程语言

五、三字符序列(Trigraphs)

字符序列是一种用于代表个字符的替代表示方法,通常由三个字符组成,并且序列始终以两个问号开始。

字符序列可以在出现的任何地方进行扩展,包括字符串字面值和字符字面值、注释以及预处理指令

以下是最常用的三字符序列及其替换方式:

字符序列 替换
??= #
??/
??’ ^
??( [
??) ]
??! |
??< {
??> }
??- ~

并非所有编译器都支持字符序列,而且由于它们容易造成混淆,不建议使用。

六、思考总结

C++ 中的 const 和 volatile 关键字有什么作用?它们在嵌入式系统中有什么应用

解释关键字 autoregister 在 C++ 中的用途及其区别

typedef 关键字在 C++ 中有何作用?能否给出一个使用 typedef 的实际例子

// 实际例子typedef int IntArray[5]; // 创建一个名为 IntArray 的数组类型别名

int main() {
    IntArray arr = {1, 2, 3, 4, 5}; // 使用 IntArray 类型别名创建数组
    // ...
    return 0;
}

在上面的例子中,IntArray 被定义为一个具有5个整数元素数组类型别名,使得声明数组变得更简洁

C++ 中的 static 关键字有什么作用?

原文地址:https://blog.csdn.net/qq_43445867/article/details/134679385

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_40136.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注