RVO et performance

RVO et performance - C++ - Programmation

Marsh Posté le 28-11-2007 à 18:17:53    

Je me posais une question de performance/bonne pratique en C++ ?
 
considérons le code ci-dessous
 

Code :
  1. // definitions
  2. CString GetS(CString A)
  3. {
  4.     CString S="%s %s" + A;
  5.     return S;
  6. }
  7. void GetS(CString A, CString &S)
  8. {
  9.     S="%s %s" + A; 
  10. }
  11. // utilisations
  12. //1
  13. {
  14. CString bb;
  15. bb.Format(GetS("bbb" ),truc,machin);
  16. }
  17. //2
  18. {
  19. CString bb;
  20. CString tp = GetS("bbb" ) ;
  21. bb.Format(tp ,truc,machin);
  22. }
  23. //3
  24. {
  25. CString bb,tp;
  26. tp = GetS("bbb" ) ;
  27. bb.Format(tp ,truc,machin);
  28. }
  29. //4
  30. {
  31. CString bb , tp;
  32. GetS("bbb",tp) ;
  33. bb.Format(tp ,truc,machin);
  34. }


 
Quelle est le code qui vous semble le plus efficace ? pourquoi ?

Reply

Marsh Posté le 28-11-2007 à 18:17:53   

Reply

Marsh Posté le 28-11-2007 à 18:39:46    

Code :
  1. void GetS(const std::string& a, std::string& b )
  2. {
  3.   b = "%s %s" + a;
  4. }


 
C'ets cool de pas copier a pour rien.
et std::string > CString :o

Reply

Marsh Posté le 28-11-2007 à 21:44:06    

évidemment oui.

Code :
  1. CString GetS(const CString& A)
  2.   {
  3.      CString S="%s %s" + A;
  4.      return S;
  5.   }
  6.   void GetS(const CString& A, CString &S)
  7.   {
  8.      S="%s %s" + A;
  9.   }


Reply

Marsh Posté le 29-11-2007 à 10:08:28    

bah void GetS(const CString& A, CString &S) est mieux

Reply

Marsh Posté le 29-11-2007 à 10:19:21    

en même temps c'est pas la question, je parle des utilisations possibles, et pourquoi...

Reply

Marsh Posté le 29-11-2007 à 10:22:18    

j'ai bien envie de répondre à coté en te disqant que std::strign + stringstream font tout ça 10x plus proprement

Reply

Marsh Posté le 29-11-2007 à 12:09:27    

J'aurais tendance à dire que la NRVO ne va marcher que si ta fonction est inline, puisque beaucoup de compilateurs ne font cette optimisation que s'il n'y a qu'un seul return (sauf LTO ?).

Reply

Marsh Posté le 29-11-2007 à 15:45:45    

ça je ne sais pas si la rendre inline va changer quel que chos, le code la haut n'est qu'un exemple bidon pour parler théorie la fonction ne peut être inliner parfois...
 
déja on peut disqualifier la 3
On crée une variable temporaire + opérateur = ,
qui génère une variable temp aussi si pas de RVO.


Message édité par Alonz le 29-11-2007 à 15:47:46
Reply

Sujets relatifs:

Leave a Replay

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