c++ - 在 C++ 中使用构造函数初始化类的数据成员的最佳方法
问题描述
我知道以下三种初始化 c++ 类的数据成员的方式。但是哪一种更安全,建议使用。请告诉我为什么?
样式-1
class example{
int var1 = 0;
double *var2 = NULL;
example()
{}
};
样式-2
class example{
int var1;
double *var2;
example()
{
var1 = 0;
var2 = NULL;
}
};
样式 3
class example{
int var1;
double *var2;
example():var1(0),var2(NULL)
{}
};
解决方案
这很难回答正确,因为对于像这样的“最佳实践”问题,您总会得到几种意见。
当不确定什么是最佳实践时,我建议遵循 C++ 核心指南。关于您的主题,请参阅C.48和C.49:
- 更喜欢样式 1 而不是样式 2,3
- 喜欢风格 3 而不是风格 2
从我的角度简要回顾一下推理:
- 样式 1 允许使用默认构造函数(不实现构造函数,但仍在初始化)
- 样式 1 允许标题的读者查看默认值
- 使用样式 1,您只需要查看一个位置以确保正确初始化变量,并且您不能“忘记”在您的构造函数之一中初始化变量
- 当使用参数初始化变量时,仍然需要样式 3。它仍然比样式 2 更可取,因为变量的“初始化”是通过初始化在代码中的预期位置清楚地传达的,而不是作为可能隐藏在构造函数代码中的赋值操作而稍微模糊
推荐阅读
- java - 我的 seekBar 没有随着我的光标触摸而前进
- dictionary - 检查 sortedMap 中的重复值
- reactjs - 添加错误消息以响应搜索过滤器
- html - 奇怪甚至用类而不是 html 标签
- c# - LINQ to Object - 如何为子组实现 WHERE 子句“如果至少有一个元素是”
- git - 如何将原始存储库的拉取请求合并到分叉存储库中?
- ios - 如何在 Moya 请求中通过 POST 请求传递原始 JSON 正文
- html - 如何在一行中放置不同尺寸的弹性物品?
- localization - 如何在 i18next 中处理粘着性语言(例如土耳其语、日语等)的不同后缀
- umbraco - Umbraco 版本 8 | 在哪里更改控制器以验证自定义模型?