[C++11] fonction renvoyant une reference sur un tableau de 10 string

fonction renvoyant une reference sur un tableau de 10 string [C++11] - C++ - Programmation

Marsh Posté le 19-09-2015 à 16:27:09    

Salut, je coince sur un exo de C++ Primer 5e édition:

 

Comme indique le titre il me faut déclarer une fonction qui renvoi une référence sur un tableau :

 

Alors, j'ai fait ceci :

 
Code :
  1. // avec le trailing return type
  2. auto rarr(const std::string& text, int i = 0) -> std::string(& )[10]
  3. {
  4.     static std::string arry[10];
  5.     for (;i<10;++i)
  6.         arry = text + std::to_string(i);
  7.     return arry; // Enfin même ici, je suis pas sûr a 100% de renvoyer une référence.
  8. }
 

Hors, il me faut le faire de 4 manière différentes :

  • En utilisant le [i]trailing return type (réponse ci-dessus)
  • En utilisant decltype
  • En utilisant un alias ( typedef ou using )
  • Et enfin sans utilisez aucune des manières listée ci-dessus.


PS: Ah j'oubliais, pas de STL ni template ne doit être utiliser.

 

[edit]

 
Code :
  1. // Avec le typedef
  2. typedef std::string tabT[10]; // Je préfère le typedef a using car ça active la coloration syntaxique dans mon ide :P
  3. tabT& rarr(const std::string& text, int i = 0);
 
Code :
  1. // Sans rien
  2. std::string (&rarr(const std::string& text, int i = 0))[10]
 
Code :
  1. //avec le decltype
  2. std::string arrT[10] // une variable global, c'est moche...
  3. decltype(arrT)& rarr(const std::string& text, int i = 0);
 

le main :

Code :
  1. int main(int argc, char **argv)
  2. {
  3.     std::string tab[10] = rarr("test 1 ", 2);
  4.     for (int i = 0; i < 10; ++i )
  5.         std::cout << "tab[ " << i << " ] = " << tab[i] << std::endl;
  6.     return 0;
  7. }
 

Du coup elles sont correct mes déclarations ?


Message édité par bqron le 19-09-2015 à 19:39:28

---------------
The success, is a progressive realization of a worthy ideal
Reply

Marsh Posté le 19-09-2015 à 16:27:09   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed