C++知识点点点点点(7)

  • 在C++代码中加入对C的支持
#ifdef __cplusplus
extern "C" {
#endif

//一段代码

#ifdef __cplusplus
}
#endif

__cplusplus是cpp中的自定义宏,表示如果这是一段cpp的代码,那么加入extern "C",以支持其中的c代码

https://www.cnblogs.com/yuemw/p/7908413.html

 

  • GCC可见性属性

#pragma GCC visibility push(default)

代码段

#pragma GCC visibility pop

可见性属性可应用到函数、变量、模板、类。

default:没有显式标识为hidden的符号均可见

hidden:没有显式标识为可见的符号均隐藏

https://blog.csdn.net/dai583113948/article/details/80618812

 

  • #if  ...  #endif:条件编译
  • using ::,::表示全局作用域

 

  • #pragma once

在头文件前添加,保证头文件只被编译一次

 

  • using指定别名
using ImageFrame = ::mavp::service::camera::ImageFrame;

 

  • const与constexpr

const:对于修饰的对象来说,并未区分出编译期常量和运行期常量

constexpr:对于修饰的对象来说,限定在了编译期常量,可以优化代码,提高效率

https://www.jianshu.com/p/34a2a79ea947

 

  • mutex、lock_guard、unique_lock

https://www.dazhuanlan.com/2019/10/28/5db5dfb97e95a/

 

  • 初始化列表
class CExample {
public:
    int a;
    float b;
    //构造函数初始化列表
    CExample(): a(0),b(8.8)
    {}
    //构造函数内部赋值
    CExample()
    {
        a=0;
        b=8.8;
    }
};

https://www.runoob.com/w3cnote/cpp-construct-function-initial-list.html

 

  • 匿名命名空间

https://www.cnblogs.com/youxin/p/4308364.html

 

  • std::move()

将左值强制转化为右值

 

  • 字符指针、字符串、数组
char *p,a='5';
p=&a;
p="abcd";

双引号做了三件事:申请内存空间(在常量区),存放字符串;在字符串末尾加上字符串结束符‘/0’;返回地址(字符串首字母地址)

//正确
char a[10]="hello";//数组初始化
//错误
char a[10];
a="hello";//数组的值虽然是地址,但是为常量,不能给常量赋值

https://www.cnblogs.com/clemente/p/10755964.html

 

  • std::string::find()与std::string::npos

https://www.cnblogs.com/lixuejian/p/10844905.html

 

  • exit( )

exit(value):退出当前运行的程序,并将参数value返回给主调进程

exit(0):表示程序正常退出,非零表示异常退出

 

  • ifstream文件读取操作

 

  • #pragma、_Pragma

#pragma:预处理指令

_Pragma:关键字

 

  • c_str()

string转const char*

 

 

待续。。。


版权声明:本文为jcsm__原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。