C/CPP关键字和函数总结

编写时间:2018年10月24日22:22:51
修改时间:2018年10月26日11:04:09


1. 关键字

1. __thread关键字

    线程局部存储(tls)是一种机制,通过这一机制分配的变量,每个当前线程有一个该变量的实例.
    __thread可用于全局的变量,文件局部静态变量,函数静态变量或一个类中的静态数据成员。不能用于块作用域,自动或非静态数据成员。


2. __builtin_expect函数

    暂时归属到这里,后期再看能不能分开整理。
    该函数涉及到编译器优化,该函数的功能就是将大概率发生的指令先放于后面,这样使得跳转的时候可以大概率往下走而不需要跳转。

// 大概率会发生的事情,1不是表示一定发生,而是大概率发生
#define LIKELY(x) __builtin_expect(x, 1)
// 小概率会发生的事情,0不表示一定不发生,而是小概率发生
#define UNLIKELY(x) __builtin_expect(x, 0)

2. 函数

1. strchr函数
#include <string.h>

// 函数的功能为在str中查找字符c第一次出现的位置,并返回该位置的指针。
// 返回的指针和str是共用同一块内存的,也就是修改返回值也会修改参数。
char* strchr(char* str, char c);

2. strrchr函数
#include <string.h>

// 函数的功能为在str中查找字符c最后一次出现的位置,并返回该位置的指针。
// 返回的指针和str是共用同一块内存的,也就是修改返回值也会修改参数。
char* strrchr(char* str, char c);

3. snprintf函数
#include <stdio.h>

int snprintf(char *str, size_t size, const char *format, ...)

参数说明:
  str:表示需要输入的字符串首指针位置
  size:制定输入的最大长度,低于全部输入,多余只输入前面一段
  const char* format: 输入格式


4. strerror函数和strerror_r函数
#include <string.h>

// strerror通过传入的errnum返回错误信息的字符串
// 不是线程安全的
char *strerror(int errnum);
// strerror_r将传入的errnum返回的错误信息的字符串写入buf中。
// 是线程安全的
int strerror_r(int errnum, char *buf, size_t n);

5. 强制转型函数
static_cast<T>(U)      //  用于基本类型的强制转型 
const_cast<T>(U)       //  用于常量型的转型
reinterpret_cast<T>(U) //  用于不同类型的转型
dynamic_cast<T>(U)     //  用于有继承关系的转型,该转型代价比较大

6. nanosleep函数
#include <time.h>

// 参数说明:
//    rqtp: 指定sleep的时间
//    rmtp: 没有超时返回的剩余时间
// 函数功能:
//    暂停某个进程直到你规定的时间后恢复
// 返回:
//    成功,也就是等完了全部的时间,返回0,否则,返回-1,并设置错误变量errno
int nanosleep(const struct timespec *rqtp, struct timespec *rmtp);

参考附录:

https://blog.csdn.net/xj178926426/article/details/54345449
https://www.cnblogs.com/xrcun/p/3210889.html
https://blog.csdn.net/qq_29108585/article/details/78059587

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中,我们可以重载运算符,使得它们能够用于自定义类型的对象。运算符重载函数是带有特殊名称的普通函数,这些名称以"operator"关键字开头,后面跟着表示重载运算符的符号。 例如,我们可以重载加号运算符`+`,使得它能够用于两个自定义类型的对象的相加。重载运算符函数的一般形式如下: ``` 返回类型 operator运算符(参数列表) { // 函数体 } ``` 其中,`operator运算符`是重载的运算符,`参数列表`是运算符所需的参数,返回类型是运算符的返回类型。 例如,我们可以重载`+`运算符,如下所示: ```cpp class Complex { public: Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {} Complex operator+(const Complex& other) const { return Complex(real + other.real, imag + other.imag); } private: double real; // 实部 double imag; // 虚部 }; ``` 在上面的代码中,我们定义了一个名为`Complex`的类,它代表一个复数。我们通过在类中定义一个名为`operator+`的函数重载了加号运算符。这个函数接受一个`Complex`类型的参数`other`,并返回一个新的`Complex`对象,该对象是将当前对象和`other`对象相加的结果。 我们现在可以使用这个运算符,例如: ```cpp Complex a(1.0, 2.0); Complex b(3.0, 4.0); Complex c = a + b; // 调用重载的加号运算符 ``` 以上代码将创建两个`Complex`对象`a`和`b`,并将它们相加,结果存储在`c`中。 需要注意的是,重载运算符函数也可以是类的成员函数,也可以是全局函数。具体使用哪种方式取决于重载的运算符和你的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值