Ich aktualisiere einen Teil meiner Codebasis von C++ 11 nach C++ 14. Ich habe mehrere mathematische Dienstprogrammfunktionen, die mehrere Eingabeargumente verwenden und einen einzelnen Wert vom Typ std::common_type_t<...>
zurückgeben.Ist es immer sicher, C + 14-Autofunktionstyp Rückführungsabzug anstelle von std :: common_type zu verwenden?
Ich überlege, den expliziten Rückgabewert durch eine einfache auto
zu ersetzen. Ich denke, dass Typabzug versucht, in diesen Fällen einen gemeinsamen Typ zu finden. Gibt es einen Fall, wo dies nicht funktionieren würde?
Ist es immer sicher mit auto
alle Vorkommen von std::common_type_T<...>
Rückgabewerte zu konvertieren?
Beispiel Funktion:
template<typename T1, typename T2, typename T3>
std::common_type_t<T1, T2, T3> getClamped(T1 mValue, T2 mMin, T3 mMax)
{
return mValue < mMin ? mMin : (mValue > mMax ? mMax : mValue);
}
Nein, aber?: Hat einen gemeinsamen Typ. –
Kann ich fragen, warum Sie Argumente verschiedener Typen für eine Funktion wie diese nehmen und nicht nur für einen einzigen Typ? – mattnewport
@mattnewport: Wahrscheinlich, weil es sonst nicht abzuleiten ist. Denken Sie 'std :: min (1, 1.)'. In diesem Fall wäre es besser, den Abzug auf Min/Max zu verhindern, im allgemeinen Fall jedoch nicht. –