предупреждение о компиляции узких конверсийКак это исправить? - PullRequest
0 голосов
/ 31 декабря 2018

Я получаю следующее предупреждение о времени компиляции:

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

Предупреждение основано на следующем коде:

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

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

TEXT('A') + i включает в себя целочисленное продвижение, поэтому предупреждение.Чтобы скрыть предупреждение, вы можете привести результат к TCHAR.

Кстати, нет гарантии, что буквы 'A' - 'Z' являются смежными в C ++ (см. EBCDIC для счетчикапример).

Что-то в TEXT("ABCDEFGHIJKLMNOPQRSTUVWXYZ")[i] должно исправить предупреждение и быть переносимым.

0 голосов
/ 31 декабря 2018

Добавление TEXT('A') + i будет выполнять обычные целочисленные преобразования, конвертируя оба операнда в целое и производя целочисленный результат.Вы должны явно привести результат обратно к TCHAR, чтобы сообщить компилятору о своих намерениях и устранить предупреждение.

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