使用相等运算符或使用大括号为变量赋值是否有区别
Is there a difference between assigning a value to a variable using the equal operator or using curly braces?
我看到一个程序员使用大括号初始化变量的代码
int var{ 5 };
而不是使用赋值运算符
int var = 5;
我知道使用大括号为 lhs 变量赋值是一种 C++11 语法。使用两者有什么区别吗?
感谢您的回复。
它们是不同类型的初始化:
T a{b}; // list initialization
T a = b; // copy initialization
T a(b); // direct initialization
int
没有区别,但其他类型的肯定会有差异。例如,如果您的构造函数explicit
,则复制初始化可能会失败,而其他两个将成功。列表初始化不允许缩小转换范围,但对于其他两个都可以。
据我所知,整数两者没有区别。{}
语法是为了(但是,不限于,因为它也用于initializer_list
)防止程序员触发 http://en.wikipedia.org/wiki/Most_vexing_parse,因此不是std::vector<int> v()
初始化v,而是编写std::vector<int> v{};
。
{}
根据用法具有不同的行为,它可以是对构造函数的调用、初始值设定项列表,甚至是值列表,以按定义顺序初始化用户定义类的成员。
最后一个示例:
class Q{
public:
int a;
int b;
float f;
};
int main()
{
Q q{2, 5, 3.25f};
}
相关文章:
- 如何检查变量是否是C++中的地图?
- 如何更好地检查两个 char 变量是否在一组值中?
- 模板变量是否允许在多个翻译单元中并有效合并?
- 如何检查模板类中的变量是否为字符串类型?
- 如何检查 int 变量是否包含合法(非陷阱表示)值?
- "new"创建的实例的所有成员变量是否都存在于堆上而不是堆栈上?
- C++11:16 字节原子<>变量是否在 16 字节边界上自动对齐,从而允许CMPXCHG16B指令?
- 程序如何知道静态变量是否需要初始化?
- 检查私有成员变量是否在一定范围内,如果没有调整
- C++ 如何检查 char 变量是否未定义(未初始化)
- 是否可以检查变量是否位于 L1/L2/L3 缓存中
- 初始化命名空间中的变量是否类似于将它们初始化为类成员?
- 如果输入类型与目标类型不同,"cin"变量是否重置为某个默认值?
- 变量是否会自动转换为函数所需的类型作为适当的参数
- const变量是否可以在具有默认值的参数中赋值(作为可选参数)
- 如何对私有变量是否已更改进行单元测试
- 将常量引用成员设置为临时变量是否安全
- 如何检查类中定义的枚举类型变量是否被分配给?
- 在链接的程序集文件中,我想从 c++ 调用代码访问变量.是否可以在不触发访问冲突的情况下执行此操作?
- "decltype(auto)"变量是否有任何实际用例?