类型收窄 error C2397: conversion from ‘const int‘ to ‘char‘ requires a narrowing conversion

类型收窄:

这是因为在列表初始化时出现了类型收窄,抛出的异常。
类型收窄:是指数据发生变化、精度丢失这种隐式类型转换的情况。
列表初始化的一个重要功能就是可以防止类型收窄narrowing)。


导致类型收窄的场景

  1. 从浮点类型隐式转换为整型数。例如 int num = 3.14; 将一个浮点型数字给到int类型变量时会进行小数截断
  2. 从高精度的浮点型转换为低精度的浮点型数据。例如 double d = 3.14159566; float f = d; 将一个double类型的变量赋给一个float的、将long double类型的变量赋给一个double类型的变量都会造成类型收窄。
  3. 从整型(非枚举类的枚举类型)转换为浮点型。整数值过大导致浮点型存不下来也会导致类型收窄。
  4. 从整型(非枚举类的枚举类型)转换为低长度的整型。这种情况类型第二条,例如long long 转换为 int

场景复现

可参考下面代码

#include <iostream>

using namespace std;

/*
 * 数据变化、精度丢失 都是类型收窄
 */

int main()
{

	const int x = 1024;
	const int y = 10;


	char a = x;  // 类型收窄 
	char* b = new char(1024);  // 类型收窄 

	char c = { x }; // 类型收窄   报错
	char d = { y };
	unsigned char e = { -1 };  // 类型收窄   报错

	float f{ 7 };

	int g{ 2.0f }; // 类型收窄   报错

	float* h = new float{ 1e48 };   // 类型收窄   报错
	float i = 1.21;
	return 0;
}

错误展示

在这里插入图片描述

在这里插入图片描述

解决方案

如果这不是本意而为那么就需要仔细检查类型收窄会不会出现意想不到的错误,若坚持这么使用的话就需要使用强制类型转换例如static_cast,或者采用默认的赋值方式


C++常见错误

fatal error C1189: #error: STL1003: Unexpected compiler, expected C++ compiler

error C2041: illegal digit ‘9‘ for base ‘8‘ | error C2059: syntax error: ‘bad suffix on number‘

Error:QSqlDatabase: QMYSQL driver not loaded (Qt+C++ 找不到mysql的驱动)

Qt5Error:msvc-version.conf loaded but QMAKE_MSC_VER ins‘t set

Error:E0415 no suitable constructor exists to convert from “int“ to “Rational“

Error:E0415 no suitable constructor exists to convert from “int“ to “Rational“


  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林夕07

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值