Přístup rozměr boost multi-pole v C++

0

Otázka

Když jsem běžet následující varovné příznaky jsem si typ převodu upozornění.

#include <boost/multi_array.hpp>

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

Viz upozornění níže. To znamená, že jsem implicitně převod 'long unsigned int' do normální 'int'?

Pokud ano, myslím, že tohle je to, co chci (třeba provádět výpočty s nrows, ncols později), a tak, jak bych si konverze explicitní?

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

Nejlepší odpověď

1

To znamená, že jsem implicitně převod 'long unsigned int' do normální 'int'?

Ano, to je, co to znamená.

Pokud nechcete, aby se upozornění, pak nemají nrows a ncols být typu int. Nejjednodušší věc udělat, je prostě nechat kompilátor odvodit typ tj.

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

nebo si můžete udělat je typu size_t, což je to, co standardní knihovna používá pro velikost nádob a nebude vydávat varování.

2021-12-04 22:35:52

V jiných jazycích

Tato stránka je v jiných jazycích

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