编译器错误C2397

Visual Studio 2015
编译器错误C2397中可以找到该主题的最新版本。


从'type_1'转换为'type_2'需要缩小转换


使用统一初始化时发现隐式缩小转换。


C语言允许在赋值和初始化时隐式缩小转换,并且C ++也可以适用,即使意外缩小是导致许多代码错误的原因。 为了使代码更安全,当初始化列表中出现缩小转换时,C ++标准需要诊断消息。 在Visual C ++中,使用从Visual Studio 2015开始支持的统一初始化语法时,诊断为编译器错误C2397。编译器在使用Visual Studio 2013支持的列表或聚合初始化语法时生成编译器警告(级别1)C4838 。


如果知道转换值的可能范围可以适合目标,缩小转换就可以。 在这种情况下,你比编译器知道的更多。 如果您故意进行缩小转换,请使用静态转换明确您的意图。 否则,这个错误信息几乎总是表明你的代码中有一个错误。 您可以通过确保初始化的对象具有足够大的类型来处理输入来修复它。


以下示例生成C2397并显示解决该问题的一种方法:


  // C2397.cpp  -  C ++缩小转换诊断  
 //通过使用:cl / EHsc C2397.cpp进行编译  
#include <vector>   
  
struct S1 {  
    int m1;  
    double m2, m3;  
};  
  
void function_C2397(double d1) {  
    char c1 { 127 };          // OK  
    char c2 { 513 };          // error C2397  
  
    std::vector<S1> vS1;  
    vS1.push_back({ d1, 2, 3 }); // error C2397  
  //d1表示double 类型
     std :: vector <S1> vS1;  
     vS1.push_back({d1,2,3});  //错误C2397  
  
     //如果你知道d1总是适合int,那么可能的修正  
     vS1.push_back({static_cast <int>(d1),2,3});   
 }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值