C++编程规范之31:不要编写依赖于函数参数求值顺序的代码

摘要:

    保持(求值)顺序:函数参数的求值顺序是不确定的,因此不要依赖具体的顺序。

在C++中对函数参数的计算顺序不是固定的,而是随机进行计算的,因此在编写程序时,要注意到这一点,不要让后面参数的计算依赖与前面参数的计算或者值。

时间: 2024-11-13 07:51:21

C++编程规范之31:不要编写依赖于函数参数求值顺序的代码的相关文章

C++编程规范之39:考虑将虚拟函数生命为非公用的,将公用函数声明为非虚拟的

摘要:     在基类中进行修改代码高昂:请将公用函数设为非虚拟的.应该将虚拟函数设为私有的,或者如果派生类需要调用基类版本,则设为保护的.     在面向对象层次结构中进行修改是昂贵的,所以应该实施完整的抽象:将公用函数设为非虚拟的,将虚拟函数设为私有的.这就是所谓的非虚拟接口模式.     公用虚拟函数本质上有两种不同而且互相竞争的职责,针对的是两种不同而且互相竞争的目标:     1.它制定了接口.作为公用函数,它是类向外界提供的接口的一部分.     2.它制定了实现细节.作为虚拟函数,

C++编程规范之30:避免重载&&,||或,(逗号)

摘要:     明智就是知道合适适可而止:内置的&&,||和,(逗号)得到了编译器的特殊照顾.如果重载它们,它们就会变成普通函数,具有完全不同的语义(这将违反地26条:保持重载操作符的自然语义和第31条:不要编写依赖函数参数求值顺序的代码),这肯定会引入微妙的错误和缺陷.不要轻率地重载这些操作符.     不能重载operator&&.operator||或者operator,的主要原因是,无法在三种情况下实现内置操作符的完整语义,而程序员通常都会需要这些语义.说的更具体一

《C++编程规范:101条规则、准则与最佳实践》——2.9 确保资源为对象所拥有。使用显式的RAII和智能指针

2.9 确保资源为对象所拥有.使用显式的RAII和智能指针 摘要利器在手,不要再徒手为之:C++的"资源获取即初始化"(Resource Acquisition Is Initialization,RAII)惯用法是正确处理资源的利器.RAII使编译器能够提供强大且自动的保证,这在其他语言中可是需要脆弱的手工编写的惯用法才能实现的.分配原始资源的时候,应该立即将其传递给属主对象.永远不要在一条语句中分配一个以上的资源. 讨论C++语言所强制施行的构造函数/析构函数对称反映了资源获取/释

C++编程规范之13:确保资源为对象所拥有。使用显示的RAII和智能指针

摘要:     利器在手,不要再徒手为之:C++的"资源获取及初始化"(ResourceAcquisition Is Initialization,RAII)惯用法是正确处理资源的利器.RAII使编译器能够提供强大且自动的保证,这在其他语言中可是需要脆弱的手工编写的惯用法才能实现的.分配原始资源的时候,应该立即将其传递给属主对象.永远不要在一条语句中分配一个以上的资源.     这就要求我们的对象.变量在他的生命周期结束的时候要进行回收,否则会造成内存泄漏.C++语言强制施行的构造函数

《Haskell并行与并发编程》——第2章,第2.1节惰性求值和弱首范式

2.1 惰性求值和弱首范式 Haskell并行与并发编程 Haskell是一门惰性语言,即表达式是在其值需要使用时才被求值2.一般来说,不必担心该过程如何发生,只要表达式在需要时求值,不需要时不被求值即可.但是,当在代码中使用了并行编程后,就需要告诉编译器一些程序运行的信息,即某些代码应该并行执行.由于对惰性求值的工作方式有一个直觉的认识将有助于有效地进行并行编程,因此本节将以GHCi作为试验工具,探讨惰性求值的一些基本概念. 下面从非常简单内容的开始:Prelude> let x = 1 +

JAVA 编程规范

编程|规范 1. 应用范围 本规范应用于采用J2EE规范的项目中,所有项目中的JAVA代码(含JSP,SERVLET,JAVABEAN,EJB)均应遵守这个规范.同时,也可作为其它项目的参考. 2. 设计类和方法 2.1 创建具有很强内聚力的类 方法的重要性往往比类的重要性更容易理解,方法是指执行一个统一函数的一段代码.类常被错误的视为是一个仅仅用于存放方法的容器.有些开发人员甚至把这种思路作了进一步的发挥,将他们的所有方法放入单个类之中. 之所以不能正确的认识类的功能,原因之一是类的实现实际上

IDesign C#编程规范(二)

编程|规范 续之一,小鸡射手接着翻译了IDesign编码规范的第二章前部. 2 编码惯例 Coding Practices 1. 避免在一个文件中放多个类. Avoid putting multiple classes in a single file. 2. 一个文件应该只对一个命名空间提供类型.避免在同一文件中有多个命名空间. A single file should only contribute types to a single namespace. Avoid having mult

《C++编程规范:101条规则、准则与最佳实践》——第2章设计风格设计风格 C++编程规范:101条规则、准则与最佳实践 复杂性啊,愚人对你视而不见,实干家受你所累。 有些人避而远之。惟智者能够善加消除。 ——Alan Perlis 我知道,但是却又忘记了Hoare的至理名言:不成熟的优化是程

第2章设计风格 C++编程规范:101条规则.准则与最佳实践 复杂性啊,愚人对你视而不见,实干家受你所累. 有些人避而远之.惟智者能够善加消除. --Alan Perlis 我知道,但是却又忘记了Hoare的至理名言:不成熟的优化是程序设计中的万恶之源. --Donald Knuth[1] The Errors of TeX[Knuth89] 完全区分设计风格与编码风格是非常困难的.我们将一般在实际编写代码时才用得到的条款留到下一部分介绍. 本部分集中讨论适用面比一个特定的类或者函数更广的原则和

C#编程规范和惯例

编程|规范 谁都会写代码!几个月的编程经验可以让你写出"可运行应用程序".让它可运行容易,但是以最有效率的方式编码就需要下更多的功夫! 要知道,大多数程序员在写"可运行代码,"而不是"高效代码".我们在这个指南课程前面提到,你想成为你们公司"最尊贵的专业人员"吗?写"高效代码"是一项艺术,你必须学习和实践它. 命名惯例和规范 注记 : Pascal 大小写形式-所有单词第一个字母大写,其他字母小写.Came