首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

const 使用总结

如果程序中有多个文件定义了const对象,需要在编译期间获取这些const对象的值的话,有可能就会造成重复定义,为了避免重复定义的问题,默认情况下,const对象被设定为仅在文件内有效,也就是说它的作用域仅限于在定义它的文件的位置开始...);// 调用的是第一个函数fun(obj2);// 调用的是第二个函数上面的代码,根据实参是否是常量对象来调用相应的函数,当使用常量实参调用fun函数,只能匹配到const版本的那个函数,当使用非常量实参调用...常量对象只能调用常量成员函数,也就是说不允许通过常量成员函数修改对象内部的数据或者状态,但有可能出现这种情况,常量成员函数虽然符合要求,因此欺骗过编译器而通过编译。...,我们通过成员函数是否有const来进行重载,这样,常量对象只能调用常量成员函数非常量对象既可以调用常量成员函数也可以调用非常量成员函数,但是对于非常量成员函数更加匹配,所以会调用非常量成员函数,我们可以定义两个重载函数...但是又有另外的问题出现,这两个成员函数函数体基本上是一模一样的,这样不仅造成代码重复,而且维护起来也麻烦,假如要修改代码,就必须要同时修改两处地方,不然就可能造成不一致的地方。

7410

读完某C++神作,我只记下了100句话

内联函数避免函数调用的开销:编译展开为函数的表达式,免去函数调用的寄存器保存恢复、复制实参跳转等。 内联函数定义在头文件。编译器类内定义的成员函数当做内联函数。...const的对象,指针引用只能调用常量成员函数。 没有前缀的成员都被假定为this在调用。 默认构造函数按变量初始化规则初始化类中所有成员【内置类型作为局部变量不初始化】。...纯虚函数==抽象类==无法创建对象 派生类对象复制基类派生类对象将被切掉【而指针引用不会】。...泛型代码两个原则:1.模板形参是const引用 2.函数只用<比较 模板形参数量自由,可以设定返回值为一个形参。...非类型形参的模板实参:template 实例化时必须是常量表达式 Screen 模板的友元表示任何实例可以访问任何实例。模板可以有模板成员

1.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

CC++编码规范

严格遵守编码规范方便代码的交流维护,利于提高代码的简洁性,稳定性效率。 2.可供参考的C++编码规范 C++额编码规范设计程序设计的方方面面,而不是三言两语就可以描述清楚的。...名字最好尽可能精确地表达其内容 避免名字中出现形状混淆的字母或数字 命名类成员使得“object.method()”有意义 类对象名应是名词...++标准, 参考:googleC++头文件包含顺序原则 引用时需要用绝对路径 函数库放在一个单独的目录下引用 不要在头文件定义常量/变量 ...模板类型应传引用/指针而不是值 注意模板编译的特殊性 2.17宏 彻底用常量替代(类似功能的)宏 代码的数值应由一个有意义的标识符代替 若宏值多于一项...,而不是重复你的代码 注释用词要精确,简单、清楚、切中要害,不能有二义性 注释的术语要通用 注释避免引用容易变化的信息 确保所有注释(随代码)

1.9K20

Google C++ 编程风格指南(五):其他 C++ 特性

友元 我们允许合理的使用友元类及友元函数. 通常友元应该定义在同一文件内, 避免代码读者跑到其它文件查找使用该私有成员的类....为类函数加上 const 限定符表明该函数不会修改类成员变量的状态 (如 class Foo { int Bar(char c) const; };). 优点: 大家更容易理解如何使用变量....你要非常小心的对待结构体对齐, 尤其是要持久化磁盘上的结构体 (Yang.Y 注: 持久化 – 数据按字节流顺序保存在磁盘文件或数据库)....预处理宏 使用宏非常谨慎, 尽量以内联函数, 枚举常量代替之. 宏意味着你编译器看到的代码是不同的. 这可能会导致异常行为, 尤其因为宏具有全局作用域....在复杂的地方使用模板代码让人更不容易读懂, 并且debug 维护起来都很麻烦 模板编程经常会导致编译出错的信息非常不友好: 在代码出错的时候, 即使这个接口非常的简单, 模板内部复杂的实现细节也会在出错信息显示

1.1K30

第 17 章 标准库特殊设施

其中,i的值必须是一个整型常量表达式,从 0开始计数,返回指定成员的引用。...正则表达式是在运行时而非编译编译的,而正则表达式的编译是一个非常慢的操作。所以在实际编程,应该尽量避免创建很多不必要的 regex对象。...一个 sregex_iterator绑定一个 string一个 regex对象,迭代器自动定位给定 string第一个匹配位置。解引用这个迭代器,则会得到一个 smatch对象。...新标准出现之前,C C++都依赖于一个简单的 C库函数 rand来生成随机。...这些函数的返回值转换过程:字符->unsigned char->int。这样,字符集中的字符的返回值总是正值,而文件尾是用负值表示。这样就不会出现某个字符的返回值与文件标记重复的情形。

1K30

学习PCL库你应该知道的C++特性

include 该hpp文件即可,无需将cpp加入项目中进行编译,而实现代码直接编译调用者的obj文件,不再单独生成obj,采用hpp大幅度的减少调用项目中cpp文件数编译次数,也不用发布lib...要避免这种情况,需要去除全局对象,全局函数封装为类的静态方法。 类之间不可循环调用:在.h.cpp的场景,当两个类或者多个类之间有循环调用关系,只要预先在头文件做被调用类的声明即可。...不可使用静态成员:静态成员的使用限制在于如果类含有静态成员,则在hpp必需加入静态成员初始化代码,当该hpp被多个文档include产生符号重定义错误。...方式一由语言支持所以移植性好,方式二 可以避免名字冲突 C++模块类 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数申明一种一般的模式,使得类的某些数据成员或者成员函数的参数,返回值取得任意类型...模板是一种对类型进行参数化的工具,通常有两种形式:函数模板模板函数模板针对仅参数类型不同的函数,类模板针对仅数据成员成员函数类型不同的类。

1.1K20

C++ 特性使用建议

但是缺省参数函数调用的代码难以呈现所有参数,开发者只能通过查看函数申明或定义确定如何使用API,当缺省参数不适用于新代码可能导致重大问题。...通常友元应该定义在同一文件内,避免代码读者跑到其它文件查找使用该私有成员的类。...某些情况下,相对于成员声明为 public,使用友元是更好的选择,尤其是如果你只允许另一个类访问该类的私有成员。当然,大多数类都只应该通过其提供的公有成员进行互操作。...在单元测试可以使用 RTTI,但是在其他代码请尽量避免。尤其是在新代码,使用 RTTI 前务必三思。...16.预处理宏 使用宏非常谨慎,尽量以内联函数,枚举常量代替之。 宏意味着你编译器看到的代码是不同的。这可能会导致异常行为,尤其因为宏具有全局作用域。

1.6K20

PCL库的C++特性

include 该hpp文件即可,无需将cpp加入项目中进行编译,而实现代码直接编译调用者的obj文件,不再单独生成obj,采用hpp大幅度的减少调用项目中cpp文件数编译次数,也不用发布lib...要避免这种情况,需要去除全局对象,全局函数封装为类的静态方法。 类之间不可循环调用:在.h.cpp的场景,当两个类或者多个类之间有循环调用关系,只要预先在头文件做被调用类的声明即可。...不可使用静态成员:静态成员的使用限制在于如果类含有静态成员,则在hpp必需加入静态成员初始化代码,当该hpp被多个文档include产生符号重定义错误。...方式一由语言支持所以移植性好,方式二 可以避免名字冲突 C++模块类 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数申明一种一般的模式,使得类的某些数据成员或者成员函数的参数,返回值取得任意类型...模板是一种对类型进行参数化的工具,通常有两种形式:函数模板模板函数模板针对仅参数类型不同的函数,类模板针对仅数据成员成员函数类型不同的类。

1.1K30

第 17 章 标准库特殊设施

其中,i的值必须是一个整型常量表达式,从 0开始计数,返回指定成员的引用。...正则表达式是在运行时而非编译编译的,而正则表达式的编译是一个非常慢的操作。所以在实际编程,应该尽量避免创建很多不必要的 regex对象。...一个 sregex_iterator绑定一个 string一个 regex对象,迭代器自动定位给定 string第一个匹配位置。解引用这个迭代器,则会得到一个 smatch对象。...新标准出现之前,C C++都依赖于一个简单的 C库函数 rand来生成随机。...这些函数的返回值转换过程:字符->unsigned char->int。这样,字符集中的字符的返回值总是正值,而文件尾是用负值表示。这样就不会出现某个字符的返回值与文件标记重复的情形。

71720

【笔记】《深入理解C++11》(上)

初始化列表的效果总是慢于就地初始化, 但也快过在构造函数中进行赋值 注意: 非常量的静态变量依然要在头文件外定义从而保证在程序只存在一个 sizeof()可以对类成员表达式使用了 类模板也可以声明友元了...原因extern变量一样, 普通的模板只存在于对应文件的.o, 如果一个模板文件被多个文件实例化就会产生多份重复代码, 没有extern的话此时重复模板会冲突....但注意右值引用不能被绑定左值 右值引用能够延长右值的声明周期, 常量左值引用属于万能引用, 也能够延迟生命周期, 但是常量左值引用后的值不能修改所以一般用来减少临时对象的开销而已 当类没有定义移动构造...(常量数值的别名), 从0开始, 且其成员在所在的范围内全局可见 enum关于在编译期被替换, 不占用代码的储存空间, 曾被用作TMP的一种特殊常量声明, 称为enum hack 由于enum的全局可见性...而且由于其本质是常量数值的原因, enum成员总是可以被隐式转换为整型, 这很容易导致比较两个不同的枚举名称出现错误的结果 C++11之前会通过类结构枚举封装, 并建立新的转换比较函数覆盖原先的操作

1.8K20

《Effective Modren C++》 进阶学习(上)

而在实际编码如何个人的标准愈发完善,愈发得到同事的认可,一定需要不断积累。如何积累,一定是从细微处着手,观摩优秀的代码,学习现有的框架,汲取前人留下的智慧。  ...因此在使用时可参考如下场景使用 复杂类型名称较长: 当变量的类型名称非常冗长或复杂,使用auto可以简化代码并提高可读性。例如,当类型名称包含模板或嵌套类型,使用auto可以减少输入错误。...类型明确可推导: 当变量的初始化表达式明确地指示了变量的类型,使用auto可以简化代码,并减少重复输入类型名称的工作。这对于使用迭代器、范围基于循环或返回自动类型推导函数函数等情况特别有用。...constexpr常量可以在编译被用作常量表达式,例如作为数组大小、模板参数或其他需要常量表达式的上下文中使用。这样可以提高代码的灵活性可读性。 编译错误检查。...如果类存在指针成员变量,则拷贝后的对象原对象共享相同的内存区域,这可能引发潜在的问题,需要注意。

15720

PHP面试题大全

(6)抽象类可以有成员方法的实现代码,而接口中不可以有成员方法的实现代码。 7、什么是构造函数,什么是析构函数,作用是什么? 构造函数(方法)是对象创建完成后第一个被对象自动调用的方法。...11、类如何定义常量如何调用常量如何在类外调用常量。 类常量也就是成员常量常量就是不会改变的量,是一个恒值。 定义常量使用关键字const....一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,注入者可以在表单输入一段数据库查询代码并提交,程序提交的信息拼凑生成一个完整sql语句,服务器被欺骗而执行该条恶意的SQL命令。...; (6)使用字段类型检查、自动验证自动完成机制等避免恶意数据的输入。...在模板访问php的变量 5、变量调解器 2018PHP经典面试题大全汇总(更新)-PHP面试题 6、php查询mysql数据库,查询中文结果出现的乱码。怎么解决?

1.4K10

C++模板元编程:利用编译时计算泛型编程

C++模板元编程:利用编译时计算泛型编程在C++模板元编程(Template Metaprogramming)是一种利用编译时计算泛型编程的技术,它使我们能够在编译阶段执行复杂的计算,并根据输入参数生成高度抽象的代码...这在实际的开发中非常有用,可以减少重复编写代码的工作量,同时提供高效的排序功能。 请注意,这只是一个简化的示例,实际的排序算法可能需要更多的细节考虑,如处理边界情况提高性能。...在Fibonacci模板结构体,我们定义了一个静态常量value来存储斐波那契的值。当N大于0,我们使用递归调用来计算前两个数的作为当前的值。...当N等于0或1,我们定义基准条件,结果设置为0或1。 在main函数,我们使用Fibonacci::value来计算第10个斐波那契。...由于这个计算是在编译进行的,所以可以通过constexpr关键字结果存储在result常量,并在运行时输出结果。在编译进行计算可以提高性能效率,并且可以避免在运行时进行重复的计算。

26300

C++打怪 之 编程风格指南 V1.0

即使一个长函数现在工作的非常好, 一旦有人对其修改, 有可能出现新的问题, 甚至导致难以发现的 bug. 使函数尽量简短, 以便于他人阅读修改代码. 在处理代码, 你可能会发现复杂的长函数....有时在已经出现了的函数参数列表之后指定返回类型, 能够让书写更简单, 也更易读, 尤其是在返回类型依赖于模板参数....但是后一种情况一般来说是很少见的, 大部分时候都出现在相当复杂的模板代码, 而多数情况下不鼓励写这样复杂的模板代码. 2 命名约定 2.1 通用命名规则 尽可能使用描述性的命名,不要用只有项目开发者才能理解的缩写...如果该类的实例可被多线程访问, 要特别注意文档说明多线程环境下相关的规则常量使用. 如果你想用一小段代码演示这个类的基本用法或通常用法, 放在类注释里也非常合适....不要在代码中使用制表符。应该设置编辑器制表符转为空格。VimMakefile需要使用制表位,Ctrl+V Tab即可出现制位表。

1.2K50

【笔记】《C++Primer》—— 第一部分:C++基础

do-while语句使得无论条件部分如何都会至少执行一次do代码,但是要注意的就是由于这个特点我们不能在do的控制体定义变量 break语句只能终止最接近的一层循环或者switch goto语句与...,可以很方便地在函数体是空完成构造函数对值的赋值 用vector类来代劳内存分配等能避免拷贝构造复杂的传值过程 访问控制符有效范围直到下个访问控制符出现或者到达类的结尾,控制符可以出现多次 有时需要外部的接口函数也可以访问类内的非公有成员...因此一方面是最好保持参数顺序与声明顺序相同以方便查找,另一方面尽量避免用某些成员来初始化其他的成员以防止初始化顺序导致的问题 C11增加了“委托构造函数”,即可以在构造函数初始值列调用非委托的构造函数了...,且只能用于直接初始化 一个类所有成员是public,没有构造函数,没有类内初始值且没有基类函数,这个类称为聚合类 数据成员都是字面值常量的聚合类或不是聚合类但其成员都是字面值,至少含有一个constexpr...构造函数成员若有类内初始值则必由字面值常量或其自己的constexpr构造且类必须使用默认的析构函数的类,称为字面值常量类 static关键字只出现在类的声明里,不能在外部重复这个关键字,最好将其定义与其他非内联函数放在一起以保证唯一次定义

1.4K40

模板优化让程序更灵活更通用

这里写目录标题 类模板模板模板类 非类型模板参数 类模板 C++的类模板(Class Template)允许创建一个通用的类,其中的数据成员成员函数的类型可以作为参数进行指定。...类模板是一种强大的工具,可以使得程序员编写出更加通用灵活的代码,同时避免重复编写相似功能的类。 类模板模板类 其实是同一个概念的两种不同叫法,它们都指代使用模板定义的类。...因此,在实际应用,这两个术语可以互换使用,都指代通过模板定义的类。在C++,类模板/模板类是一种非常有用的工具,它使得编写通用、灵活的类变得更加容易,并且提高了代码的复用性。...因此,非类型模板参数必须是常量表达式,可以在模板参数列表中直接提供。 代码优化:非类型模板参数的值在编译已知,这使得编译器可以在生成代码进行优化。...总结来说,非类型模板参数允许我们在使用模板传递常量值,从而在编译确定某些值,并在生成代码进行优化。这为我们提供了更大的灵活性通用性,使得模板可以适用于各种场景。

10010

人工智能编程助手Devchat从01体验

DevChat基本介绍 概述DevChat 是一个开源平台,使开发人员能够更有效地 AI 集成代码生成和文档。DevChat 旨在超越简单的代码自动完成代码片段的有限操作。...轻松您自己的提示模板集成 DevChat 避免了大量的工程工作或陡峭的学习曲线。你不需要一个复杂的框架来让人工智能为你工作。它所需要的只是一个在文件系统上运行的标准编辑器。...DevChat主要价值在于提高开发效率、减少重复性劳动降低错误率。借助DevChat,开发者可以更专注于思考创新,而非纠结于繁琐的代码编写。...它也有望成为团队协作和知识共享的工具,帮助团队成员共享经验最佳实践。 功能概述情境构建:出色的输出需要出色的输入。...字符串池:Java的字符串常量池(String Pool)是一种特殊的内存区域,用于存储字符串字面量。当创建一个字符串常量,JVM会首先检查字符串常量池。

1.3K691

QT(C++)面试总结

当这个flag设置,当某个信号槽已经连接,再进行重复的连接就会失败。也就是避免重复连接。...1.传值 这种传递方式,实参形参是两个不同的地址空间,参数传递的实质是函数变量的值,复制被调用函数形参所在的存储空间中,这个形参的地址空间在函数执行完毕后,会被回收掉。...这个转换好理解,可以常量转成非常量。...C++#ifndef, #define, #endif的作用使用的注意事项 答:其实这几句代码的主要作用的官方解释是:为了防止头文件的重复包含编译。...…… #endif 注意事项: #ifndef AAA #define AAA … int i; … #endif 里面有一个变量定义 在vc链接出现了i重复定义的错误,而在c成功编译。

1.8K10

C++编译与链接(0)-.h与.cpp的定义与声明

typedef 在不同的cpp可以一样 变量 1、在.h只能声明,在.cpp可以声明与定义一个变量 如果在.h的定义一个变量,则该变量被include两次以上则会出现重定义错误 2、在不同....static成员,一个文件对其的修改不会影响另一个文件 所以static变量一般是放在.cpp出现并定义....模板函数模板类的声明与实现必须放在一个文件 总结 是否可以在.h定义 在不同.cpp是否可以重名 特殊说明 函数 不可以,会出现重定义错误 不可以 内联函数 可以 可以 为了确保所有调用该...,而不可以在构造函数函数体内初始化 2、同类数据成员的特殊说明 类的静态的数据成员 ------------------- 不可以 不可以就地初始化,需要到.cpp中进行定义 (对于非常量的静态成员变量...需要到头文件以外去定义它) 类的静态的常量整形数据成员 ------------------ 可以 特殊说明 模板 模板函数模板类的声明与实现必须放在一个文件 至于为什么会这样,与C++的编译链接

3.5K70

整理了70道C语言与C++常见问答题

而 C++除了上述功能外,还用来定义类的成员变量函数。即静态成员和静态成员函数。...一个C、C++程序编译内存分为5 大存储区:堆区、栈区、全局区、文字常量区、程序代码区。...「注意」:无论是指针常量还是常量指针,其最大的用途就是作为函数的形式参数,保证实参在被调用函数的不可改变特性。 27 如何避免“野指针” 指针变量声明时没有被初始化。...这个功能十分有用处,因为在C++出现以前,很多代码都是C语言写的,而且很底层的库也是C语言写的,为了更好的支持原来的C代码已经写好的C语言库,需要在C++尽可能的支持C,而extern "C"就是其中的一个策略...的向下兼容性,把C++的最基本的对象单元规定为class而不是struct,就是为了避免各种兼容性要求的限制 对struct定义的扩展使C语言的代码能够更容易的被移植C++ 32 C++类内可以定义引用数据成员

2.9K01
领券