Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » welche ist besser

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.04.2004, 06:32 Uhr
kaihua



Folgende sind 2 programme, machen gleiche Aufgabe, sum = 1+2+3+...+100;

C++:
// Program 1
// compiliert in VC 6.0 und run in VC 6.0
#include <iostream>
using namespace std;

int main()
{
    int n = 100;
    int sum = n*(n+1)/2;
    cout<<sum;

    system("pause");

    return 0;
}





C++:
// Program 2
// Compiliert und run in Dev C++
// Error vorkommt wenn es in VC 6.0 compiliert
#include <iostream>

template<int num>
struct Sum
{
    static const int value=Sum<num-1>::value+num;
};

template<>
struct Sum<1>
{
    static const int value=1;
};

int main()
{
    std::cout<<Sum<100>::value<<std::endl;
}



Jetzt die Frage ist welche Program ist besser. Jemand behauptete, Program 2 ist besser, weil das Ergebnis während compilerzeit schon erzeugt, deswegen schneller als Program 1. Ist das wahr?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.04.2004, 07:38 Uhr
(un)wissender
Niveauwart


Was heißt hier besser? In welchem Bezug?
Das zweite dauert länger zu komplieren und läuft schneller, weil es einfach die Summe als Zahl einsetzt und nichts rechnet.
Das hat vor und Nachteile:
Wenn man sowas und ähnliches öfter in einem großeren Programm macht, dann wird es lange dauern es zu konpiliereren->schlecht.
Außerdem geht das nur bei bekannten Werte und nicht bei dynamisch zur Laufzeit errechneten/erfragten Werten.
Andererseits kann man durch diese Art der Templateprogrammierung sehr schnelle Programme erzeugen.
Ist also eine Sache der Sichtweise.
Und es läuft nicht auf einem sehr verbreiteten Compiler->schlecht (vielleicht auch der Compiler).
--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 28.04.2004 um 07:39 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.04.2004, 10:10 Uhr
0xdeadbeef
Gott
(Operator)


Wie wärs damit?

C++:
#include <iostream>

int main() {
  std::cout << 550 << std::endl;
  return 0;
}


Aber mal im Ernst, template metaprogramming hat schon seinen Sinn. Wenn man den Code vernünftig in Module aufteilt, kann man mit dem Compiletime-Overhead gut leben, und zur Laufzeit ist es allemal schneller.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: