Bon, je me sens un peu bête en posant cette question mais bon.
Je vous la fais avec un grand classique du C++.
Code :
- template<class T>
- class Matrix : protected std::vector<T>{
- public:
- uint m_nbRow;
- uint m_nbCol;
- Matrix(uint nbRow, uint nbCol, const T& value= T()):std::vector<T>(nbCol*nbRow, value), m_nbCol(nbCol),m_nbRow(nbRow){}
- const T& operator () (uint row, uint column) const{
- return std::vector<T>::operator[](column + (row * m_nbCol));
- }
- T& operator () (uint row, uint column) {
- return std::vector<T>::operator[](column + (row * m_nbCol));
- }
- };
|
Mon compilo me renvoi un WARNING disant que je retourne une référence sur un objet temporaire : "attention : retourné la référence vers le temporaire" (Eh oui j'ai G++ en FR au boulot ).
Pourtant l'operateur [] des std::vector retourne bien une (const ou pas) ref.
De plus, j'ai fais quelques UT et la classe semble se comporter correctement, notamment au niveau de l'affectation d'une case.
Code :
- Matrix<uint> m = Matrix<uint>(2,3,0);
- m(1,0) = 3;
|
Crée bien:
0 0 0
3 0 0
Ma question est : je comprends pas pourquoi il me fait ce warning et dois-je m'en inquiéter ?