窄转换编译警告。如何解决?

narrow conversion compile warning. How to fix it?

我收到以下编译时警告:

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

警告基于以下代码:

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

加法 TEXT('A') + i 将进行通常的整数提升,将两个操作数都转换为整数并产生整数结果。您必须明确地将结果转换回 TCHAR 以告诉编译器您的意图并消除警告。

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

TEXT('A') + i涉及整数提升,所以警告。要消除警告,您可以将结果转换为 TCHAR.

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

TEXT("ABCDEFGHIJKLMNOPQRSTUVWXYZ")[i] 应该修复警告,并且可以移植。