And*_*nak 16 c++ safety-critical type-safety narrowing c++11
static_cast在C++ 11/14或实现此功能的库中是否有"安全"替代方案?
"安全"我的意思是演员应该只允许不失精度的演员.因此,如果数字适合a ,则仅允许来自int64_tto int32_t的强制转换int32_t,否则报告错误.
Cal*_*eth 34
窄//
narrow<T>(x)是static_cast<T>(x)ifstatic_cast<T>(x) == x还是它抛出narrowing_error
Xir*_*ema 21
你的用例被颠倒了.
static_cast(以及其他c ++风格的演员表)的预期用途是表明程序员的意图.当你写作时auto value = static_cast<int32_t>(value_64);,你会说"是的,我非常*打算*向下转换这个值,当我执行这个任务时可能会截断它".结果,编译器可能倾向于在正常情况下(例如,如果你已经写过int32_t value = value_64;)抱怨这种转换,而是观察"好吧,程序员告诉我这是他们想要的;为什么他们会撒谎对我来说?" 并将静默编译代码.
如果你希望你的C++代码,以警告或扔在不安全的转换错误,你需要明确地不使用static_cast,const_cast,reinterpret_cast,,让编译器完成其工作.编译器有改变警告怎么治疗(向下转型的标志int64_t,以int32_t通常只产生一个警告),所以一定要确保你使用了正确的标志,以迫使被视为错误的警告.
| 归档时间: |
|
| 查看次数: |
2051 次 |
| 最近记录: |