当前位置: 首页 > news >正文

C++常用但难记的语法

模板函数的声明和定义必须在同一个文件中。

C++中每一个对象所占用的空间大小,是在编译的时候就确定的,在模板类没有真正的被使用之前,编译器是无法知道,模板类中使用模板类型的对象的所占用的空间的大小的。只有模板被真正使用的时候,编译器才知道,模板套用的是什么类型,应该分配多少空间。

参考:https://cloud.tencent.com/developer/article/1942017

静态成员函数,可以用类名::函数名进行访问,而不需要对类进行实例化。

// 通过类名调用静态成员函数
class Point{
public:static void output(){}
};void main()
{Point::output();
}

以inline修饰的函数,在编译时会在调用内联函数的地方展开,没有函数压栈的开销,提高程序运行效率

注意: inline只用于内容重复,但代码很短的函数,避免出栈入栈消耗额外的时间,对于复杂函数,不建议用inline,因为他在每个调用位置都会复制编译,会让代码变得非常长,被100个位置调用,该函数的内存增加100倍,而且现在电脑非常快,inline其实根本没必要,一般只有几行的函数才有理由用inline,因为他的出栈入栈跳转相对本身代码运行时间的比例较高,而长代码就微乎其微。

static inline函数前缀,对函数的作用

对于内联函数,不能像普通函数那样,直接在.h文件里面声明下、.c源文件里面定义下,然后其他C文件就可以调用。而加上static的前缀后,就解决了这个问题。

具体原因如下
如果inline函数在两个不同的文件中出现,也就是说一个.h被两个不同的文件包含,则会出现重名,链接失败。
所以static inline 的用法就能很好的解决这个问题,使用static修饰符,函数仅在文件内部可见,不会污染命名空间。可以理解为一个inline在不同的.C里面生成了不同的实例,而且名字是完全相同的。

总结:static和inline联合使用既能提高程序的运行效率又能让其声明后被多个.c文件使用。

constexpr常量表达式的作用

常量表达式主要是允许一些计算发生在编译时,即发生在代码编译而不是运行的时候。这是很大的优化:假如有些事情可以在编译时做,它将只做一次,而不是每次程序运行时。

它可以修饰变量函数

可变模版参数  <typename...

C++11起,支持可变模版参数。可变参数模板是模板编程时,模板参数(template parameter)的个数可变的情形。

例如,STL的类模板tuple可以有任意个数的类型名(typename)作为它的模板形参(template parameter):

template<typename... Values> class tuple;

如实例化为具有3个类型实参(type argument):

tuple<int, std::vector<int>, std::map<<std::string>, std::vector<int>>> some_instance_name;
http://www.lryc.cn/news/404426.html

相关文章:

  • Qt 快速保存配置的方法
  • RKE部署k8s
  • 从0开始的STM32HAL库学习8
  • 微信小程序数组绑定使用案例(一)
  • Kudu节点数规划
  • flutter 充电气泡
  • 【C++】deque以及优先级队列
  • 手机如何播放电脑的声音?
  • 系统架构设计师教程 第3章 信息系统基础知识-3.6 办公自动化系统(OAS)-解读
  • 解决Element UI 表格组件懒加载数据刷新问题
  • 【系统架构设计 每日一问】二 MySql主从复制延迟可能是什么原因,怎么解决
  • Ubuntu Grub引导优化
  • 第3关 -- Git 基础知识
  • AttributeError: ‘WebDriver‘ object has no attribute ‘find_element_by_xpath‘
  • 题解:小S与机房里的电脑 Computer_C++算法竞赛_贪心_二分答案_模拟_数据结构
  • Python @staticmethod、super().__init__()和self
  • Linux网络:应用层协议HTTP(一)
  • Tomcat底层原理
  • 【Linux】Linux环境设置环境变量操作步骤
  • C语言:键盘录入案例
  • Nginx 中如何实现请求的排队机制?
  • synergy配置
  • Qt开发网络嗅探器03
  • 抖音短视频seo矩阵系统源码开发技术分享(二)--SaaS开源
  • git-常用基础指令
  • Inconsistent Query Results Based on Output Fields Selection in Milvus Dashboard
  • 视觉巡线小车——STM32+OpenMV
  • 升级TrinityCore 服务器硬件
  • NVidia 的 gpu 开源 Linux Kernel Module Driver 编译 安装 使用
  • win7显卡驱动更新后msvcp140.dll丢失的解决方法