Accesarea dimensiune a stimula multi-matrice în C++

0

Problema

Atunci când am rula următoarele, cu steaguri de avertizare am obține o conversie de tip de avertizare.

#include <boost/multi_array.hpp>

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

Vedea un mesaj de avertizare de mai jos. Asta înseamnă că sunt implicit conversia unui long unsigned int' o 'int'?

Dacă este așa, cred că asta e ceea ce vreau (nevoie pentru a efectua calcule cu nrows, ncols după aceea), și așa cum mi-aș face conversia explicită?

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

Cel mai bun răspuns

1

Asta înseamnă că sunt implicit conversia unui long unsigned int' o 'int'?

Da, asta este ceea ce înseamnă.

Dacă nu vrei avertizare atunci nu face nrows și ncols fi de tip int. Cel mai simplu lucru de făcut este de a lăsa doar compiler deduce tipul respectiv

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

sau puteți să le facă de tip size_t, care este ceea ce biblioteca standard utilizează pentru dimensiunea de containere și nu va emite un semnal de avertizare.

2021-12-04 22:35:52

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................