(2)C++的小细节改善,C++参考的C库介绍,网址,介绍容器类型array,deque,forward_list,list,map,queue,set,stack,unordered_map

1.unsigned int 和 int 做比较,使用显示转换static_cast

在这里插入图片描述

if(TimerEslaped(dwTime) > nTimeOut)
            {
                LOGERROR("Time Out");
                return false;
            }
if(TimerEslaped(dwTime) > static_cast<unsigned int>(nTimeOut))
            {
                LOGERROR("Time Out");
                return false;
            }

2.static_cast的用法

在C++中,static_cast 是一种强制类型转换操作符,用于在不同类型之间进行显式转换,其主要用途包括:

  1. 基本数据类型之间的转换:它可以用来在整数、浮点数之间进行转换,或是将枚举类型转换为整数类型等。

    double pi = 3.14;
    int integerPart = static_cast<int>(pi); // 转换为整数,结果为 3
    
  2. 指针类型之间的转换:用于类的层次结构中,将基类指针或引用安全地转换到派生类指针或引用,反之亦然。只有当适用的对象确实是目标类型时,转换才是安全的。

    class Base {};
    class Derived : public Base {};
    
    Base* basePtr = new Derived;
    Derived* derivedPtr = static_cast<Derived*>(basePtr); // 基类指针转换为派生类指针
    
  3. 将void指针转换为具体类型指针:当你从一个void*类型的指针转换到另一个具体类型的指针时使用。

    void* voidPtr = new int(42);
    int* intPtr = static_cast<int*>(voidPtr); // void 指针转换为 int 指针
    
  4. 进行一些隐式转换:比如非常量转换为常量,或者子类对象转为基类对象。

不过,static_cast 不能用于不相关类型之间的转换(如将一个整数转换为一个指针),也不能用于去除一个对象的 constvolatile 属性,对于这些操作应使用 const_castreinterpret_cast

与C风格的强制类型转换相比,static_cast 更加安全,因为它在编译时进行检查,从而避免了C风格转换的多义性和潜在风险。static_cast 也是最常用的C++强制类型转换操作符之一,因为它既能提供类型转换的灵活性,又能保证基本的安全性检查。

3.inline内联函数

C++教程网站:https://cplusplus.com/doc/tutorial/
在这里插入图片描述

4.静态存储和自动存储

这段话在描述 C++ 中变量存储类型(Storage classes)中的两种主要的存储期:静态存储期(Static storage duration)和自动存储期(Automatic storage duration)以及它们的不同行为。让我们来详细解释一下这段话的内容:

  1. 全局或命名空间作用域的变量使用静态存储(Static Storage):

    • 这类变量在程序的整个执行期间都会分配存储空间。换句话说,这些变量在程序开始时被创建,在程序结束时被销毁。
    • 全局变量或者处于命名空间(namespace)但不在任何函数内部声明的变量通常具有静态存储期。
    • 如果这类变量没有显示地初始化,C++保证它们会被自动初始化为零。这意味着内置类型如 int、float 等将被初始化为 0,指针类型将被初始化为 nullptr
  2. 块作用域内的变量使用自动存储(Automatic Storage):

    • 局部变量通常通过在函数内部声明来定义,这些变量只在包含它们的代码块({ … })中存在。一旦代码块执行完毕,这些局部变量的生命周期就结束了。
    • 比如,一个函数中的局部变量,在函数被调用时,每次都会为这些变量分配存储空间,而当函数调用结束,这些存储空间就会被释放。
    • 如果局部变量没有显示地初始化,它们将保持未初始化状态,其值是不确定的。引用这些未初始化变量的值是危险的,因为它们可能包含任何数据,甚至可能导致程序错误。

这段理解的关键在于:

  • 静态存储期变量的生命周期贯穿整个程序执行周期,它们的初始值是确定的。
  • 自动存储期变量的生命周期仅限于声明它们的代码块,在其未显示初始化的情况下它们的初始值是不确定的。

在实际编程中,明白变量何时被创建、销毁和它们的初始状态对于编写可靠和预测的代码是至关重要的。这也解释了为什么在某些情况下,全局变量(静态存储)可能比局部变量(自动存储)更容易管理,因为它们的行为通常更能预测。然而,全局变量的滥用也可能导致代码难以理解和维护,因此最好保持谨慎。

5.命名空间和using的使用

// using
#include <iostream>
using namespace std;	//在使用std范围内的函数时,可以直接调用cin,而不用std::cin
						//缺点是,代码多可能会名称混淆
namespace first
{
  int x = 5;
  int y = 10;
}

namespace second
{
  double x = 3.1416;
  double y = 2.7183;
}

int main () {
  using first::x;
  using second::y;
  cout << x << '\n';
  cout << y << '\n';
  cout << first::y << '\n';
  cout << second::x << '\n';
  return 0;
}

6.C++参考的C库介绍,网址,介绍容器类型array,deque,forward_list,list,map,queue,set,stack,unordered_map,unordered_set, vector

https://cplusplus.com/reference/
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值