窄转换编译警告.如何解决它

narrow conversion compile warning. How to fix it?

本文关键字:解决 何解决 转换 编译 警告      更新时间:2023-10-16

我收到以下编译时警告:

warning C4838: conversion from 'int' to 'TCHAR' requires a narrowing conversion

该警告基于以下代码:

TCHAR driveName[] = { TEXT('A') + i, TEXT(':'), TEXT(''), TEXT('') };

加法TEXT('A') + i将执行通常的整数提升,将两个操作数转换为整数并生成整数结果。必须将结果显式转换回TCHAR,以告诉编译器你的意图并消除警告。

TCHAR driveName[] = { static_cast<TCHAR>(TEXT('A') + i), TEXT(':'), TEXT(''), TEXT('') };

TEXT('A') + i涉及整数提升,因此警告。要使警告静音,您可以将结果转换为 TCHAR

顺便说一句,不能保证字母'A' - 'Z'在C++是连续的(参见EBCDIC的反例)。

沿着TEXT("ABCDEFGHIJKLMNOPQRSTUVWXYZ")[i]的东西应该修复警告,并且是便携式的。