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 поменяет знак результата.

→ Ссылка