C++系列一:语言基础-杂烩2

目录

前言:

继续……

# 信号处理
1. 信号是由操作系统传给进程的中断,会提早终止一个程序。
2. 头文件 <csignal> 中。
SIGABRT	程序的异常终止,如调用 abort。
SIGFPE	错误的算术运算,比如除以零或导致溢出的操作。
SIGILL	检测非法指令。
SIGINT	程序终止(interrupt)信号。
SIGSEGV	非法访问内存。
SIGTERM	发送到程序的终止请求。 

#include <iostream>
#include <csignal>
#include <unistd.h>
using namespace std;
void signalHandler( int signum )
{
    cout << "中断信息("<<signum<<")";
    exit(signum); // 退出信息   
}
int main ()
{
    // 注册信号 SIGINT 和信号处理程序
    //CTRL+C中断
    signal(SIGINT, signalHandler);  
    while(1){
       cout << "test……" << endl;
       sleep(1);
    }
    //或者  raise() 生成信号
    while(++i){
    cout << "test……" << endl;
    if( i == 3 ){ raise( SIGINT);}
    sleep(1);
    }
    return 0;
}

//模板
template <typename T>
inline T const& Max(T const& a, T const& b)
{
    return a < b ? b : a;
}
int main()
{
    int i = 39;int j = 20;
    cout << "Max(i, j): " << Max(i, j) << endl;
    double f1 = 13.5;double f2 = 20.7;
    cout << "Max(f1, f2): " << Max(f1, f2) << endl;
    string s1 = "Hello";string s2 = "World";
    cout << "Max(s1, s2): " << Max(s1, s2) << endl;
    return 0;
}
//重载运算符
class Box
{
public:
    // 重载 + 运算符,用于把两个 Box 对象相加
    Box operator+(const Box& b)
    {
        Box box;
        box.length = this->length + b.length;
        return box;
    }
public:
    double length;      // 长度
};
// 程序的主函数
int main()
{
    Box Box1; Box1.length = 1;              // 声明 Box1,类型为 Box
    Box Box2; Box2.length = 2;               // 声明 Box2,类型为 Box
    Box Box3;                // 声明 Box3,类型为 Box
    // 把两个对象相加,得到 Box3
    Box3 = Box1 + Box2;
    cout << "Volume of Box3 : " << Box3.length << endl;
    return 0;
}

C++20 新的语法特性:

1. 概念(Concepts):
允许开发者定义模板参数的约束条件,以便更好地控制模板实例化时的类型。这可以提供更清晰的错误信息,并避免意外的实例化。
template <typename T>
concept Integral = std::is_integral_v<T>;

template <Integral T>
T square(T value) {
    return value * value;
}

2. 初始化语句中的声明:
for (int i = 0; auto value : {1, 2, 3, 4, 5}) {
    // 使用变量i和value进行循环
}
3. constexpr if
template <typename T>
void process(T value) {
    if constexpr (std::is_integral_v<T>) {
        // 处理整数类型
    } else {
        // 处理其他类型
    }
}
4. 范围基于的for循环中的初始化器:
for (auto i : {1, 2, 3, 4, 5}) {
    // 使用变量i进行操作
}
5. 还有一个三方运算符,真怪,有些不懂呢(懂用法,不懂意义)
posted @ 2023-08-14 11:48  cactus9  阅读(26)  评论(0编辑  收藏  举报