随笔分类 - c++
摘要:C++11中新增加了用于指示常量表达式的constexpr关键字。在这里区分两者的用法。 基本含义/语法 const和constexpr都可以来修饰对象和函数。 修饰对象的时候两者之间最基本的区别是: const修饰一个对象表示它是常量。这暗示对象一经初始化就不会再变动了,并且允许编译器使用这个特点
阅读全文
摘要:一、在普通函数中的使用 例如下面的代码, 数组的大小必须是常量,在声明数组array时,用函数返回值,此时会报错: error C2131: 表达式的计算结果不是常数 note: 对未定义的函数或为未声明为“constexpr”的函数的调用导致了故障 用constexpr关键字可以解决这种问题,在G
阅读全文
摘要:前言指针是一种保存变量地址的变量,简单指针容易分析,但是当指针稍微复杂,就很容易无从下手,比如: char *(*(**foo[][8])())[]; 1下面将会由浅入深的探究指针 普通指针#include <cstdio>#include <iostream> using namespace st
阅读全文
摘要:前面我们讲解了指针数组、二维数组指针、函数指针等几种较为复杂的指针,它们的定义形式分别是: 我相信大部分初学者对上面几种形式的指针都非常迷惑,不知道该从哪里入手去理解,为什么p1、p2 是数组,而 p3 却是指针呢,它们仅仅是一个括号的区别。 指针是C语言中最强大最灵活的一部分,也是最难以理解的一部
阅读全文
摘要:声明:1. 文章如有不妥的地方,请您指正,谢谢. 2.另外文中有些细节可能引用您的内容却未给出参考,请原谅我的疏忽,你的共享我不会忘记. 3. Email:lizhiguo0532@163.com 李枝果/lizgo 4. 转载请保留该部分信息 //两个原则//右左法则:首先从最里面的圆括号看起,然
阅读全文
摘要:目录0、摘要 1、指针函数 2、函数指针 3、函数指针数组 4、将函数作为传参传入另一个函数 5、以下两个指针能分析清楚的话,那么 99% 的 C 语言指针问题都难不住你。 参考: 0、摘要指针函数是返回指针的函数,函数指针是指向函数的指针。 int* FunctionReturnsPtr(int
阅读全文
摘要:首先,看如下8个题,如果您能不看任何资料的情况下做对。那么恭喜您,这块应该基本没问题了。因为再复杂的组合都是从这上面8种里变出来的。 1,定义一个整形数 2,定义一个指向整形数的指针 3,定义一个指向指针的指针,它指向的指针,是一个指向整形数的指针 4,定义一个具有10个整形数的数组 5,定义一个具
阅读全文
摘要:五、constexpr说明符 constexpr说明符声明该变量或函数在编译期进行求值,从而适用于需要编译器常量表达式的地方 在变量声明constexpr时,对象或非静态成员函数蕴含const,函数或静态成员变量蕴含inline constexpr变量必须立刻被初始化 constexpr int a
阅读全文
摘要:一、 常量表达式:是指值不会改变并且在编译过程就能得到的计算结果的表达式。 定义常量表达式变量: constexpr 变量类型 变量名; 例如: constexpr int mf=20;/////20是常量表达式 constexpr int limit=mf+1;/////mf+1是常量表达式 co
阅读全文
摘要:文章目录1 const 常量的判别准则1.1 编程实验2 小结 看了前面的关于 const 的内容,不知道是不是有疑问,const 什么时候为只读变量,什么时候是常量?1 const 常量的判别准则只有用字面量初始化的 const 常量才会进入符号表使用其他变量初始化的 const 常量仍然是只读变
阅读全文
摘要:我知道 constexpr 允许您在编译时将对象用作常量,但是什么时候这会有益呢?我试图更好地理解关键字,但我找不到一个很好的例子来解释为什么需要它的构造函数。 下面的两个例子都有效,那么为什么要将 constexpr 放在构造函数上呢? 在构造函数上使用 constexpr: #include <
阅读全文
摘要:内联(inline) 内联函数以牺牲源文件大小为代价减小程序运行的时间,内联函数类似于一种编译器控制的复制/粘贴功能,当一个函数内部逻辑执行的消耗要远小于函数调用本身的消耗时,会额外增加栈空间的消耗,而被标记为内联的函数,编译器会直接将函数的定义“粘贴”到代码的调用处,直接在调用处将代码展开,这样就
阅读全文
摘要:什么是表达式(表达式的定义)?表达式是C语言的重要语法成分,不过对于表达式的定义,好像从来没有人关注过。今天就孔乙己一把吧,哈哈。先贴标准对expression的定义(ISO/IEC 9899:2011 6.5): An expression is a sequence of operators a
阅读全文
摘要:表达式:表达式是运算符、常量和变量的组合。一个表达式可以由一个或多个操作数和零个或多个运算符组成以产生一个值。 例子: a+b C s-1/7*f . . ETC 表达式类型: 表达式可以是以下类型: 常量表达式:常量表达式仅包含常量值。恒定值是不变的值。例子: 5, 10 + 5 / 6.0, '
阅读全文
摘要:目录 一、decltype关键字 二、decltype的推导规则 1、表达式为单独变量 2、表达式为函数调用 3、表达式为左值,或者被()包围 三、 decltype的应用 在前面一章,小编已经对auto类型推导这个关键字进行了介绍,相信小伙伴们都知道了auto的用法以及限制了吧,不知道的小伙伴回头
阅读全文
摘要:系列文章C++11之正则表达式(regex_match、regex_search、regex_replace) C++11之线程库(Thread、Mutex、atomic、lock_guard、同步) C++11之智能指针(unique_ptr、shared_ptr、weak_ptr、auto_pt
阅读全文
摘要:前言记录下阅读此书的感想与总结,一方面能巩固复习,另一方面也能更好地浓缩本书的精华,方便日后的回看。 第五章 右值引用、移动语义和完美转发它们带来的好处 移动语义使得编译器能使用效率更高的移动操作来替换昂贵的复制操作移动语义使得创建只移对象成为可能,如:std::unique_ptr, td::th
阅读全文
摘要:左值、右值、左值引用以及右值引用 std::move和std::forward这两个API主要服务于左值引用和右值引用的转化和转发,因此再了解这两个API之前,需要先弄清楚这几个概念。 左值:一般指的是在内存中有对应的存储单元的值,最常见的就是程序中创建的变量 右值:和左值相反,一般指的是没有对应存
阅读全文
摘要:c++在c++11标准中引入了lambda表达式,一般用于定义匿名函数,使得代码更加灵活简洁。lambda表达式与普通函数类似,也有参数列表、返回值类型和函数体,只是它的定义方式更简洁,并且可以在函数内部定义。 什么是Lambda表达式 最常见的lambda的表达式写法如下 auto plus =
阅读全文
摘要:lambda 表达式是 C++11 最重要也最常用的一个特性之一,C# 3.5 和 Java 8 中就引入了 lambda 表达式。 lambda 来源于函数式编程的概念,也是现代编程语言的一个特点。C++11 这次终于把 lambda 加进来了。 lambda表达式有如下优点: 声明式编程风格:就
阅读全文