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

你应该在构造函数中检查错误的参数值吗?

在构造函数中检查错误的参数值是一个很好的做法,因为它可以帮助确保对象在创建时具有有效的属性和状态。这有助于避免在对象的生命周期中出现不一致性和错误。

在构造函数中检查参数值的优势包括:

  1. 提高代码质量:通过在构造函数中检查参数值,可以确保对象在创建时具有有效的属性和状态,从而提高代码质量。
  2. 减少错误:通过在构造函数中检查参数值,可以减少错误,从而提高代码的可靠性和稳定性。
  3. 提高可维护性:通过在构造函数中检查参数值,可以帮助确保代码的一致性和可维护性。

在构造函数中检查参数值的应用场景包括:

  1. 确保对象具有有效的属性和状态:通过在构造函数中检查参数值,可以确保对象具有有效的属性和状态,从而提高代码的可靠性和稳定性。
  2. 避免不一致性:通过在构造函数中检查参数值,可以帮助确保对象的生命周期中不会出现不一致性,从而提高代码的可靠性和稳定性。
  3. 提高代码的可读性和可维护性:通过在构造函数中检查参数值,可以帮助确保代码的一致性和可维护性,从而提高代码的可读性和可维护性。

推荐的腾讯云相关产品和产品介绍链接地址:

  1. 腾讯云云服务器:https://cloud.tencent.com/product/cvm
  2. 腾讯云数据库:https://cloud.tencent.com/product/cdb
  3. 腾讯云存储:https://cloud.tencent.com/product/cos
  4. 腾讯云负载均衡:https://cloud.tencent.com/product/clb
  5. 腾讯云云硬盘:https://cloud.tencent.com/product/cbs
  6. 腾讯云虚拟私有云:https://cloud.tencent.com/product/vpc
  7. 腾讯云内容分发网络:https://cloud.tencent.com/product/cdn
  8. 腾讯云移动应用与游戏解决方案:https://cloud.tencent.com/product/tbaas
  9. 腾讯云物联网通信:https://cloud.tencent.com/product/iotcloud
  10. 腾讯云人工智能:https://cloud.tencent.com/product/ai

在构造函数中检查错误的参数值是一个很好的做法,因为它可以帮助确保对象在创建时具有有效的属性和状态。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【C++】C++ 类 this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 有构造函数设置默认参数值 | 返回匿名对象与返回引用 )

; } 详细代码 , 参考最后完整代码示例 ; 二、有构造函数设置默认参数值 ---- 为 Student 类定义了有构造函数 , 则其默认构造函数 , 就不会生成 ; // 带构造函数..." << endl; } 此时 , 如果要创建 Student 对象 , 只能调用上述 有构造函数 , 如果使用 Student s2 方式调用 默认构造函数 创建 Student 对象 , 就会报错...; 如下带参数构造函数 , 并且为其 有构造函数 参数 设置一个默认值 , 此时就可以使用 类名 对象名 方式定义对象变量 ; class Student { public: // 带构造函数...创建 Student 实例对象 Student s(18, 180); // 打印对象情况 s.print(); // 调用有构造函数 , 有构造函数参数使用默认值 Student s2...= 19 , height = 181 执行 Student 构造函数 执行 Student 构造函数 执行 Student 析构函数 执行 Student 析构函数 age = 19 , height

22420
  • 知道?多个类多线程环境下静态构造函数执行顺序

    网上很多资料说到静态构造函数,但是很少提到与线程相关,这个例子实际上是想测试一下静态构造函数多线程冲突。 其实,这个问题源自于XCode v7.3一个隐秘BUG。...实体类A静态构造函数可能会开一个线程去执行方法B,然后静态构造函数接着执行后续方法C,问题就在于B和C都会争夺同一个锁,如果B拿到这个锁,它会创建一个A实例,但是因为A静态构造函数正常执行C,C...// 2,CreateOperate将会实例化一个TEntity对象,从而引发TEntity静态构造函数, // 避免实际应用,直接调用Entity静态方法时,没有引发...TEntity静态构造函数。...4,也是最隐秘地方。测试代码,在A静态构造函数里面使用了匿名函数,而编译器会把它编译成为A一个静态方法,因此,它就成了A静态成员了,所以…… 实际上,我们没注意到地方是第四点,太粗心了!

    87770

    【149期】面试官:能说出Java 检查异常 和 非检查异常 区别

    总结:java异常分为两类:checked exception(检查异常)和unchecked exception(未检查异常),对于未检查异常也叫RuntimeException(运行时异常)....异常都是发生在程序运行期,编译出现问题叫语法错误。 2.异常处理机制: 1)当程序再运行过程中出现了异常,JVM自动创建一个该类型异常对象。同时把这个异常对象交给运行时系统。...用throws向外声明(合理处理方法) 3.异常分类: java.lang.Throwable Error错误:JVM内部严重问题。无法恢复。程序人员不用处理。...6.手动抛出一个异常:当程序逻辑不符合期望时,要中止后面代码执行时。 在方法代码段,可以使用throw关键字手动抛出一个异常。...尽量减少try-catch语句嵌套。 在catch块代码段,应该打印除该异常堆栈跟踪信息以方便调试。

    1.1K30

    一个完整TDD演练案例(三)

    字段 学员在定义执行该任务类时,一种可能性是将输入答案作为类构造函数参数。...例如: new InputValidator("1 2 3 5").validate(); 存在两个错误错误地判断了输入值生命周期。什么内容应该放在构造函数作为参数?...换言之,构造函数参数与对象之间关系是什么?之所以要作为构造函数参数,就是意味着在某种场景下这些参数值应该在创建该对象时就存在。这些参数值与对象“生死与共”,它们生命周期是保持一致。...如果不是,就不应该作为构造函数参数。觉得输入应该作为构造函数?如果我要验证另一条输入应该怎么办?再创建一个InputValidator对象? 违反了阅读直觉。validate()方法验证谁?...对于表达一种错误规则来说,如果将其看做是一种业务规则,最好表达方式是采用自定义异常,除非这门语言允许返回两个值(例如Go语言支持返回多个字,但并不支持异常)。

    89970

    《重构》第十章 - 读后感(简化函数调用)

    转变为一个对象好处之前说了很多次了,主要就是防止代码变动导致全局变动,而且能够减少重复代码。 10.移除设置函数某个字段应该在对象创建时被设置,然后就不再改变。...12.以工厂函数取代构造函数 希望在创造对象时候不仅仅是做简单建构动作,那么就将构造函数替换为工厂函数。...改造过程主要是开发工厂方法,并将根据入创建对象代码放置到工厂函数,并将原始创建函数私有化。为何私有化原因就是不再使用了,然后将问题暴露出来再进行改造。...14.以异常取代错误码 如果一个函数返回一个特定错误码,用以表示某种错误情况,那就改成异常吧!很多人写代码异常用少,然后代码各种if语句。...那么修改调用者,使它在调用函数之前先做检查。让有问题不再继续向下执行。

    29110

    重构-改善既有代码设计:简化函数调用 (八)

    请看看现有的参数,然后问自己:能从这些参数得到所需信息?如果回答是否定,有可能通过某个函数提供所需信息究竟把这些信息用于何处?这个函数是否应该属于拥有该信息那个对象所有?...此外,不使用完整对象也会造成重复代码,因为被调用函数无法利用完整对象函数来计算某些中间值。 不过事情总有2面:如果数值,被调用函数就只依赖于这些数值,而不依赖它们所属对象。...10.Remove setting Method 移除设置函数某个字段应该在对象创建时被设值,然后就不再改变。去掉该字段所有设值函数。...理想状态下,可以使用工具检查所有函数,指出可被隐藏起来函数。即使没有这样工具,也应该时常进行这样检查。...然而由于构造函数只能返回单一类型对象,因此需要将构造函数替换为工厂函数。 此外,如果构造函数功能不能满足需要,也可以使用工厂函数代替它。

    48610

    React 面试必知必会 Day9

    通过这样做,可以避免由于 setState() 异步性而导致用户在访问时获得旧状态值问题。 假设初始计数值为 0。在连续三次递增操作后,该值将只递增一个。...使用 isMounted() 是一种代码异味,因为检查唯一原因是认为可能在组件卸载后还持有一个引用。 一个最佳解决方案是找到在组件卸载后可能调用 setState() 地方,并修复它们。...如果使用 JSX 渲染组件,该组件名称必须以大写字母开头,否则 React 将抛出一个错误,即未识别的标签。这个惯例是因为只有 HTML 元素和 SVG 标签可以以小写字母开头。...当使用 ES6 类时,应该在构造函数初始化状态,而当使用 React.createClass() 时,应该在 getInitialState() 方法初始化状态。...请使用普通 JavaScript 类来代替。 10. 能在不调用 setState 情况下强制一个组件重新渲染? 默认情况下,当你组件状态或 props 改变时,组件会重新渲染。

    1K30

    C++初阶 类和对象(下)

    拷贝构造函数只有单个形,该形是对本类类型对象引用(一般常用const修饰),在用已存在类类型对象创建新对象时由编译器自动调用。 1.2 为什么得是引用?...为什么这个形得是被类对象引用呢,我直接传递我这个要拷贝目标不可以,不是一样操作。...这样说吧,假设有一个Date d和你个test函数,你想将d传递给test函数,于是编译器就会调用这个拷贝构造函数,而调用这个拷贝构造函数时候会生成一个叫做date,而这个形刚好也是Date...1.4 拷贝构造函数有什么用? 学到这里,大家恐怕也是明白了,拷贝构造函数就是简单地将目标内容拷贝给新定义对象罢了, 那么它有用,这是很多初学者疑惑,实际上它不仅仅是有用,它是很有用。...我想说是,这样多少有点舍本逐末了,因为在C++之所以会有类原因,有一部分就是因为多个结构体函数和变量过于混乱,而按方法去做,那么这个类成员变量所有人都可以进行操作,那哪还有什么规矩,这个类创建又有什么意义

    16010

    【C++】掌握C++类六个默认成员函数:实现高效内存管理与对象操作

    、忘记显示写构造函数,编译器默认生成构造函数都称为默认构造函数,在使用过程默认构造函数只能调用其中一种,这里推荐调用全缺省构造函数 class Date { public: //1.无构造函数...为了避免混洗这两种情况,要求对象实例化调用无构造函数,不允许添加括号 对于无构造与有构造,无构造需要函数内部设置好数值,而有构造采用外部实参数值。...给出回答:我们从对于内置与自定义类型处理上来看,编译器虽然对于内置类型初始化数值为随机值,但是确保了内置类型完成了初始化操作,避免了缺乏构造函数而导致编译错误。...: 拷贝构造函数本身属于构造函数一种重载,同类型对象进行初始化 拷贝构造函数参数只有一个且必须是类类型对象引用,使用传值方式编译器直接报错,因为会引发无穷递归调用(编译器可能会强制检查) 4.2 关于对拷贝构造疑...6.5 赋值运算符深拷贝 既然编译器生成默认赋值运算符重载已经可以完成字节序值拷贝,还需要自己实现

    11200

    如何检查参数合法性?

    背景 大部分方法和构造函数对传入数值有一些限制,比如:常见索引值必须是非负数,对象引用不能为空。 应该使用清晰文档来标注所有的这些限制,然后在方法体开始地方强制他们检查。...应该在错误发生时候尽快检查出来,这是基本原则。 如果不这么做,当错误发生时候,错误将不会被检测出来,这让定位错误源头变得更困难。...构造函数代表了一个特殊例子原则:应该检查即将存储稍后会用到参数合法性。 检查构造函数参数合法性非常重要,它可以防止构造一个违反类不变性对象。...所以:这里有一个小店,在开始时候检查列表元素应该是可以互相比较,注意:修改合法性检查会丧失原子失败。 偶尔,一个计算执行了一个需要合法性检查,但是当执行检查失败时候,抛出了一个错误异常。...小结 如果看完之后只能记住一句话:每次写一个方法或者一个构造函数应该思考参数限制是否存在,应该把限制写在文档,并在方法体开始部分确保进行了检查

    1.3K10

    写了挺久代码,却还被异常支配?

    我们从吐槽回过神来想一想,自己写代码还没点 x 数,异常、bug 不就是自己精神伴侣,没这点东西支撑,自己平时怎么冠冕堂皇划水呢! ? 是什么导致我们平时遇到异常很多,却记不起几个。...异常捕获 在编写代码处理异常时,对于检查异常,有2种不同处理方式:使用try…catch…finally语句块处理它;或者在函数签名中使用throws声明交给函数调用者去解决。...咋看代码可以觉得很奇怪,为什么有人会优先使用基于异常循环,大部分会这样写都会以为错误判断机制性能会比较高,因为 JVM 对每次数组访问都要检查是否越界。...我们上面只是简单继承了 Exception ,构造函数无法传入我们想要表达错误报告,实现这种方式也很简单,我们只需要为异常类定义一个接受字符串参数构造器: ?...不知道是否做对了,答案是返回 finally 结果,由此可知: try return 语句调用函数先于 finally 调用函数执行,也就是说 try return语句先执行,finally

    56810

    C++经典面试题(最全,面率最高)

    这时,被调函数就成为原来主调函数实参变量或对象一个别名来使用,所以在被调函数对形参变量操作就是对其相应目标对象(在主调函数操作。...(2)使用引用传递函数参数,在内存并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形分配存储单元,形参变量是实参变量副本;如果传递是对象,还将调用拷贝构造函数...(3)使用指针作为函数参数虽然也能达到与使用引用效果,但是,在被调函数同样要给形分配存储单元,且需要重复使用"*指针变量名"形式进行运算,这很容易产生错误且程序阅读性较差;另一方面,在主调函数调用点处...编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到错误。...编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到错误(边际效应) 。

    1.9K30

    《逆袭进大厂》第三弹之C++提高篇79问79答

    尽在本文件。只在当前源文件中使用函数应该说明为内部函数(static),内部函数应该在当前源文件说明和定义。...对于可在当前源文件以外使用函数应该在一个头文件说明,要使用这些函数源文件要包含这个头文件。...在比如,数值和布尔类型转换,整数和浮点数转换等。 某些方面来说,隐式转换给C++程序开发者带来了不小便捷。C++是一门强类型语言,类型检查是非常严格。...拷贝构造函数用来初始化一个非引用类类型对象,如果用传值方式进行传参数,那么构造实参需要调用拷贝构造函数,而拷贝构造函数需要传递实参,所以会一直递归。 149、知道空类大小是多少?...167、知道数组和指针区别

    2.2K30

    c++面试选择题_C语言经典笔试题

    这时,被调函数就成为原来主调函数实参变量或对象一个别名来使用,所以在被调函数对形参变量操作就是对其相应目标对象(在主调函数操作。...(2)使用引用传递函数参数,在内存并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形分配存储单元,形参变量是实参变量副本;如果传递是对象,还将调用拷贝构造函数...(3)使用指针作为函数参数虽然也能达到与使用引用效果,但是,在被调函数同样要给形分配存储单元,且需要重复使用”*指针变量名”形式进行运算,这很容易产生错误且程序阅读性较差;另一方面,在主调函数调用点处...格式:类型标识符 &函数名(形列表及类型说明){ //函数体 } 好处:在内存不产生被返回值副本;(注意:正是因为这点原因,所以返回一个局部变量引用是不可取。...编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到错误

    1.1K10

    Go函数及与函数相关机制 【Go语言圣经笔记】

    每一次函数调用都必须按照声明顺序为所有参数提供实参(参数值)。在函数调用时,Go语言没有默认参数值,也没有任何方法可以通过参数名指定形,因此形和返回值变量名对于函数调用者而言没有意义。...在函数函数作为局部变量,被初始化为调用者提供值。函数和有名返回值作为函数最外层局部变量,被存储在相同词法块。 实参通过值方式传递,因此函数是实参拷贝。...Go这样设计原因是由于对于某个应该在控制流程处理错误而言,将这个错误以异常形式抛出会混乱对错误描述,这通常会导致一些糟糕后果。...我们应该在每次函数调用后,都养成考虑错误处理习惯,当你决定忽略某个错误时,应该清晰地写下意图。 在Go错误处理有一套独特编码风格。...检查某个子函数是否失败后,我们通常将处理失败逻辑代码放在处理成功代码之前。如果某个错误会导致函数返回,那么成功时逻辑代码不应放在else语句块,而应直接放在函数

    1.1K20

    真的了解 Java 8 lambda 表达式、方法引用、函数式接口、默认方式、静态方法

    ; 4 }).start(); 会发现,用 lambda 表达式方式能够写更少代码,看起来也会更加舒服和简洁。 这里没有使用参数,只是一个简单例子。 我们再看一个例子。...是不是需要 new 一个对象呢,那么现在用构造函数引用又是怎么做呢? 下面我们用一个例子讲解一下,在这个例子,对象还是使用上面的 ClassMate。...② 第二个我们使用构造函数引用创建对象 ClassMate::new 。...③ 我们发现构造函数引用:类名::new ,然后对于使用哪一个构造函数是由上下文决定,比如有一个参数和两个参数和无参数构造函数,会自动确定用哪一个。...函数式接口 什么是函数式接口呢? 这个名词在 Java 以前是很少听到,但是正是有了 Java 8 横空出世,函数式编程也变得熟悉了。

    1.2K20

    C++引用高级使用!

    这时,被调函数就成为原来主调函数实参变量或对象一个别名来使用,所以在被调函数对形参变量操作就是对其相应目标对象(在主调函数操作。...(2)使用引用传递函数参数,在内存并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形分配存储单元,形参变量是实参变量副本;如果传递是对象,还将调用拷贝构造函数...(3)使用指针作为函数参数虽然也能达到与使用引用效果,但是,在被调函数同样要给形分配存储单元,且需要重复使用"*指针变量名"形式进行运算,这很容易产生错误且程序阅读性较差;另一方面,在主调函数调用点处...3、引用作为返回值: 要以引用返回函数值,则函数定义时要按以下格式: 类型标识符 &函数名 (形列表及类型说明) { 函数体 } 说明: (1)以引用返回函数值,定义函数时需要在函数名前加...【例5】以下程序定义了一个普通函数fn1(它用返回值方法返回函数值),另外一个函数fn2,它以引用方法返回函数值

    54320
    领券