Как инициализировать переменные типа шаблона? - PullRequest
2 голосов
/ 20 декабря 2011
template <class T>
void MyClass<T>::MyMethod()
{
    // ...

    // Which of the following initialization is better?
    T MyVariable1 = 1;                  // 1st
    T MyVariable2 = 2.0;                // 2nd
    T MyVariable3 = static_cast<T>(3);  // 3rd

    // ...
}

Какой из них лучше?

РЕДАКТИРОВАТЬ: T является примитивным типом.

1 Ответ

4 голосов
/ 20 декабря 2011

Если T может быть только примитивного типа (int, float и т. Д.), Я не думаю, что есть какая-либо разница; во всех случаях компилятор выполнит соответствующее преобразование (и, вероятно, выполнит подстановку во время компиляции).

Если T является пользовательским типом, то, очевидно, он не будет компилироваться, если в нем не определены соответствующие конструкторы. В этот момент это может иметь значение (например, если вы определили T::T(int) и T::T(double)).

...