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. 还有一个三方运算符,真怪,有些不懂呢(懂用法,不懂意义)