c++ - 如何初始化模板类型变量?

标签 c++ static-cast class-template variable-initialization

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 是原始类型。

最佳答案

如果T只能是原始类型(intfloat等),我认为没有什么区别;在所有情况下,编译器都会执行相关转换(并且可能会在编译时执行替换)。

如果T是用户定义的类型,那么显然这些将无法编译,除非它定义了适当的构造函数。在这一点上,它可能会产生影响(例如,如果您同时定义了 T::T(int)T::T(double))。

关于c++ - 如何初始化模板类型变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8567628/

相关文章:

c++ - 为什么 CRTP 中的沮丧定义行为

c++ - 查找范围内的最大和第二大元素

c++ - C++模板方法中的循环依赖

c++ - 使用 Static_Cast 派生类指针指向基类对象

从函数指针的参数推导 C++ 模板类型

c++ - 一个变量(或一个属性)可以等于一个类型?

c++ - 不同的模板类实现但相同的成员函数

c++ - 你会选择什么?虚函数、模板还是分支?

c++ - 对象的动态内存分配

c++ - 常规转换不会抛出运行时错误