Доступ к измерению нескольких массивов boost в C++

0

Вопрос

Когда я выполняю следующее с предупреждающими флагами, я получаю предупреждение о преобразовании типов.

#include <boost/multi_array.hpp>

void function (boost::multi_array<unsigned char, 2> matrix) {
  int nrows = matrix.shape()[0];
  int ncols = matrix.shape()[1];
}

См. предупреждающее сообщение ниже. Означает ли это, что я неявно преобразую "длинное беззнаковое int" в обычное "int"?

Если это так, я думаю, что это то, что я хочу (нужно выполнить вычисления с помощью nrows, ncols впоследствии), и как бы я сделал преобразование явным?

image.cpp:93:32: warning: conversion to ‘int’ from ‘boost::const_multi_array_ref<float, 2ul, float*>::size_type {aka long unsigned int}’ may alter its value [-Wconversion]
     int nrows = matrix.shape()[0];
boost c++
2021-11-20 23:46:16
1

Лучший ответ

1

Означает ли это, что я неявно преобразую "длинное беззнаковое int" в обычное "int"?

Да, вот что это значит.

Если вам не нужно предупреждение, то не делайте nrows и ncols будьте в своем роде int. Проще всего просто позволить компилятору вывести тип, т. е.

auto nrows = matrix.shape()[0];
auto ncols = matrix.shape()[1];

или вы можете сделать их типа size_t, именно это стандартная библиотека использует для определения размера контейнеров и не выдает предупреждение.

2021-12-04 22:35:52

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................