c++ - 使用模板时实际发生了什么?

标签 c++ templates

我对模板的概念有点困惑。也就是说,如果你有这样的功能:

template<typename T>
void DoubleValue(T &param)
{
    param *= 2;
}

编译器如何知道我可以将哪些类型传递给此函数?如果代码适用于该类型,它会测试所有已知类型吗?这有性能问题吗?

最佳答案

与 Java 或 C# 中的泛型相反(类型参数的行为类似于 boost::any,即编译器安全、运行时检查的 void*), [类/函数]模板不是[类/函数]。它用于在实例化点(不要与对象实例化混淆)生成临时[类/函数]。

实例化可以是显式的:

// Hey compiler, please generate code for DoubleValue<int>.
template void DoubleValue<int>(int &param);

...或隐含的:

int main() {
    // Hey compiler, I want to call DoubleValue<float>.
    // Please generate the code if it's not done already.
    return DoubleValue(1.5f);
}

所有这些都是在编译时完成的。

关于c++ - 使用模板时实际发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31240520/

相关文章:

c++ - OpenGL 第一人称相机不移动

c++ - 为什么 lambda 表达式不需要 <functional>,而 function<void()> 需要?

C++14 变量模板 : what is their purpose? 有任何用法示例吗?

c++ - 从这里实例化错误

javascript - 使用 NgInclude 加载 AngularJS 组合指令模板

c++ - 为什么标准不允许在模板参数列表中初始化常量依赖类型?

c++ - 寻找平台 SDK SSPI(Schannel) 示例 c++

c++ - 宏 INT_MAX 在哪里定义的?

c++ - 使用 OpenGL 风扇而不是根据不同的位置创建圆有什么好处?

templates - 如何使用特定键访问该结构映射中的结构字段值