conversion to '...' from int may change the sign of the result
#include <iostream>
#include <array>
int main()
{
std::array<std::string, 1> xx{"hello"};
int x = 0;
std::cout << xx[x] << std::endl;
}
Выдает предупреждение:
qwer.cpp:8:18: warning: conversion to ‘std::array<std::__cxx11::basic_string<char>, 1>::size_type’ {aka ‘long unsigned int’} from ‘int’ may change the sign of the result [-Wsign-conversion]
8 | std::cout << xx[x] << std::endl;
| ^
Что это означает?
Ответы (1 шт):
Автор решения: magrif
→ Ссылка
У класса array перегруженный оператор [] принимает в качестве параметра size_type, который является псевдонимом беззнакового целочисленного типа long unsigned int. Вы же, в свою очередь, передаёте ему переменную x, имеющую знаковый тип int. Вот компилятор и предупреждает, дескать, а вдруг в x записано отрицательное число, и это преобразование int в size_type поменяет знак результата.