基元类型初始化的构造函数语法和赋值语法之间的差异
Differences between constructor syntax and assignment syntax for primitive type initialisation
在阅读一位同事写的一些代码时,我偶然发现了使用构造函数语法初始化基元类型变量。比如下面的内容:
#include <iostream>
int main()
{
using namespace std;
// initialized using assignement syntax (copy initialisation)
int titi = 20;
cout << "titi=" << titi << "n"; // got 20 in titi, it works
// initialized using constructor syntax (direct initialization)
int toto(10);
cout << "toto=" << toto << "n"; // got 10 in toto, it works
}
我的自然倾向是坚持赋值语法,因为它是历史语法,而且很容易,而且存在明显的兼容性问题(构造语法不符合有效的C)。
我仍然想知道这两种语法之间是否还有其他不明显的区别?如果它们的意思是一样的?考虑到未来的维护/代码进化问题或可读性问题,其中一种或另一种形式的优缺点是什么?
对于int
这样的简单类型,没有区别。对于类类型,即所谓的"构造函数语法"直接初始化,以及所谓的"赋值语法"复制初始化。除非该类支持复制,因此倾向于直接初始化(需要注意的是最麻烦的解析问题)。有些人则表示赞同基于同质性:在任何地方都使用相同的格式。
构造函数语法在处理模板时很有用,因为您不知道类型是基元类型还是类。
相关文章:
- 为"adjacent"变量赋值时出现问题
- C++中的赋值发生,尽管右侧出现异常
- 用C++中的sscanf赋值
- 为std::string的某个索引赋值
- 重载Singly Linked List中的赋值运算符
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- gtest_使用setargpointee在函数中赋值
- 赋值到类型和空大括号. 语法说明
- C++定义/赋值语法
- c++:用于短路的 if 块语法中的多重赋值
- 模板的赋值运算符(成员函数)实现的正确语法
- 数组赋值无法使用指针语法
- 为什么赋值表达式的标准C++语法看起来如此怪异
- 基元类型初始化的构造函数语法和赋值语法之间的差异
- 与列表初始化语法的自动赋值混淆
- 通过move赋值实现B=f(A)语法
- 多重赋值(a = b) = c语法是如何工作的?
- 给结构体映射赋值的语法
- c++复制赋值语法比较-哪个更好
- 为什么不允许使用赋值语法进行auto_ptr初始化