《Effective C++》条款26

news/2024/7/1 7:00:34

尽可能延后变量定义式的出现时间

string test(const string& passwd)
{
	string s;
	if (s.size() < MinLenth)
	{
		throw logic_error("passwd is too short");
	}
}

这段代码的问题是:如果抛出了异常,那么定义的string对象将面临毫无意义的构造和析构。

所以可以这样修改:

string test(const string& passwd)
{
	
	if (s.size() < MinLenth)
	{
		throw logic_error("passwd is too short");
	}
	string s;
	...
	return s;
}

但是这段代码仍然不够秾纤合度,因为s虽获定义却无任何实参作为初值。这意味调用的是其default构造函数。许多时候你该对对象做的第一次事就是给它个值,通常是通过一个赋值动作达成。

更受欢迎的是以passwd作为s的初值,跳过毫无意义的default构造过程。

string test(const string& passwd)
{
	
	if (s.size() < MinLenth)
	{
		throw logic_error("passwd is too short");
	}
	...
	string s(passwd);
	...
}

你不只应该延后变量的定义,直到非得使用该变量的前一刻为止,甚至应该尝试延后这份定义直到能够给它初值实参为止。如果这样, 不仅能够避免构造和析构非必要对象,还可以避免毫无意义的default构造行为。


http://lihuaxi.xjx100.cn/news/1852409.html

相关文章

网工内推 | 云计算运维,云相关认证优先,最高30K,带薪年假

01 安畅网络 招聘岗位&#xff1a;云计算运维工程师 职责描述&#xff1a; 1、负责对公有云平台的计算、存储、网络资源等IAAS/SAAS/PAAS层产品组件日常交付部署运维工作&#xff0c;包括调试、配置、维护、监控、优化等工作&#xff1b; 2、负责对操作系统及应用日常运行维护…

【腾讯云云上实验室-向量数据库】个人对腾讯云向量数据库的体验心得

目录 前言Tencent Cloud VectorDB概念使用初体验腾讯云向量数据库的优势应用场景有哪些&#xff1f;未来展望番外篇&#xff1a;腾讯云向量数据库的设计核心结语 前言 还是那句话&#xff0c;不用多说想必大家都能猜到&#xff0c;现在技术圈最火的是什么&#xff1f;非人工智…

Serilog .net下的新兴的日志框架

Serilog .net下的新兴的日志框架 1.Serilog简介 Serilog 是针对 .NET 应用程序的流行日志记录框架。它以其灵活性、易用性和可扩展性而闻名。借助 Serilog&#xff0c;开发人员可以轻松记录应用程序中的事件、错误和消息。它支持结构化日志记录&#xff0c;能够以结构化格式存…

Linux常用命令----rmdir命令

文章目录 1. 简介2. 参数含义3. 常见用法及实例4. 注意事项5. 结语 1. 简介 rmdir命令在Linux系统中用于删除空的目录。它是一个基本的命令行工具&#xff0c;用于维护文件系统的组织结构。与rm命令不同&#xff0c;rmdir只能删除空目录&#xff0c;这提供了一种安全机制&…

修复电脑中缺失的VCRUNTIME140.dll文件的5个有效方法

vcruntime140.dll丢失5个修复方法与vcruntime140.dll是什么以及丢失对电脑的影响 引言&#xff1a; 在日常使用电脑的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“vcruntime140.dll丢失”。那么&#xff0c;什么是vcruntime140.dll&#xff1f;它…

2次MD5加密——用于分布式对话

用户端 &#xff1a; 指发起请求并与服务器进行交互的终端设备或应用程序。它可以是电脑、智能手机等。 用户端负责发送请求给服务端&#xff0c;并接收和处理服务端返回的响应。 服务端 &#xff1a; 是指提供服务、接收和处理用户端请求的计算机系统或应用程序。 它监听来自用…

CentOS一键安装docker脚本

CentOS安装Docker一键脚本 在CentOS上安装Docker是许多项目中常见的任务之一。为了简化这个过程&#xff0c;你可以使用下面的一键脚本。 #!/bin/bash# 卸载旧版本&#xff08;如果有&#xff09; sudo yum remove -y docker \docker-client \docker-client-latest \docker-c…

SSM SpringBoot vue考勤信息管理系统

SSM SpringBoot vue考勤信息管理系统 系统功能 登录 注册 个人中心 部门信息管理 上班时间管理 考勤信息管理 员工信息管理 签到管理 请假信息管理 加班申请管理 出差申请管理 开发环境和技术 开发语言&#xff1a;Java 使用框架: SSM(Spring SpringMVC Mybaits)或Spring…