【问题标题】:What is narrowing cast when I use initializer list?当我使用初始值设定项列表时,什么是缩小范围?
【发布时间】:2020-11-23 07:35:42
【问题描述】:

有人告诉我这样写更有效

SomeType val{another_val};

SomeType val = another_val;

因为在第二种情况下我们有缩小演员表。

你能解释一下这是什么吗?使用初始化列表进行初始化是否更有效?

【问题讨论】:

  • narrowing conversions 部分,它说“列表初始化限制了允许的隐式转换”。所以,我会说它更安全。虽然,我猜如果你使用第二种方式,编译器会在这些情况下给你警告
  • 这里的正确术语是缩小conversion。此代码中没有强制转换。强制转换是您在源代码中编写的内容,用于告诉编译器进行转换。

标签: c++ initialization initializer-list


【解决方案1】:

使用大括号是使代码更安全的另一种方法,仅此而已。例如

int main() {
    unsigned n = -1.0; // hopefully a compiler warning, undefined behaviour
    unsigned m {-1.0}; // certainly a compiler diagnostic
}

【讨论】:

    猜你喜欢
    • 2011-03-16
    • 2020-01-11
    • 2016-05-23
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 2021-10-29
    • 2020-03-29
    • 1970-01-01
    相关资源
    最近更新 更多