funktion template <>



  • template <typename T>
    T &const mymax(T const&a, T const& b)
    {
        return std::max(a, b);
    }
    
    int main()
    {
        std::cout << ::mymax<>(1, 2);
        return 0;
    }
    

    hier statt ::mymax<>(1,2)kann ich auch einfach ::mymax(1, 2), oder ::mymax<int>(1, 2) schreiben. Welche Unterschiede zwischen den 3 fällen?



  • mymax<>(1,2) und mymax(1,2) sind identisch - der Compiler ermittelt anhand der Parameter, welchen Typ er für T einsetzen muß. mymax<int>(1,2) gibt dem Compiler den Typ vor (du könntest ihn auf diese Weise auch zwingen, die double-Version zu erzeugen, indem du "cout<<mymax<double>(1,2);" schreibst).

    btw, die :: sind in deinem Beispiel überflüssig.


  • Mod

    das compiliert? hier wird eine const referenz (von std::max) an eine non-const referenz gebunden.



  • camper schrieb:

    das compiliert? hier wird eine const referenz (von std::max) an eine non-const referenz gebunden.

    Ist wahrscheinlich nen Tippfehler, das const soll vor das &, dahinter macht es ja auch gar keinen Sinn.

    Gruß



  • T const& mymax(T const&a, T const& b)
    

    ich habe const und & umgetauscht


Anmelden zum Antworten