c++ - C++ 讨论:使用 =、{} 和 () 作为初始化程序,我应该使用哪一个?
问题描述
在阅读 C++ 核心指南时,isocpp
我通过了本节。我已经在迄今为止阅读的一些 C++ 代码中看到了这些方法。例如:在()
初始化构造函数初始化列表中的数据字段时已经使用了,即使对于primitive
类型,我也看到它在本地使用。有些使用{}
变量的初始化。而其他人则使用此=
. 我不知道他们之间有什么区别。我的意思是它们是否实现了相同的目标,只是风格不同,或者它们具有不同的含义。谁能解释一下!
解决方案
您可能对有关此主题的录音讨论感兴趣 - 在 C++(11 及更高版本)中使统一初始化“工作”的近期历史:
CppCon 2018:Nicolai Josuttis “C++ 初始化的噩梦”</a>
那次谈话结束时的一些内容:
- 谷歌在他们的 Abseil 倡议中,拒绝尝试将人们“转换”为一致使用花括号初始化。因此,当初始化主动应用某些逻辑时,他们坚持采用/推荐 equals 进行“直接”初始化和括号。Nicolai 不赞成这种做法。
- Nicolai 建议:努力改变我们的习惯,并且更喜欢花括号初始化。现在比以前好多了。
PS - 这个演讲可能也很有趣:
Core C++ 2019 :: Timur Doumler :: 现代 C++ 中的初始化
它更多是关于调查不同类型初始化的复杂性(并且有很多!)
推荐阅读
- regex - 在不复制表达式的情况下,强制正则表达式用引号括起来或根本不用引号
- r - 当某些观察值少于 n 行时,使用 dplyr 在数据帧中对每组随机采样 n 行
- python - OpenCV中PIL库函数ImageEnhance.Contrast(image).enhance(param)的等价物是什么?
- c# - 无法将列表附加到现有文件。C#
- r - 使用点 (...) 将不同的参数传递给内部函数
- jenkins - 错误无法建立一个或多个指定的浏览器连接。这可能是由网络问题或远程设备故障引起的
- reflection - Threejs:glb文件反映环境但不反映自身
- kubernetes - 如何在不丢失集群数据的情况下重启 kube apiserver
- python - Python:当我们在特定列中有重复项时合并行
- javascript - How to convert an object with arrays as values to an array of objects