当我开始学习C++时,有一个概念,我无法完全掌握和理解力学背后的推理.那个主题是:函数模板和在编译时传递参数,而不是运行时.
我想知道的是,在编译时传递--lets的值例如 - int值的设计背后的原因.我认为C++的开发人员可能允许在运行时传递值,但我想知道的是 - 选择传递值的原因,让我们说一个int,在编译期间.当然我在谈论像这样的功能模板:
#include <iostream>
using namespace std;
template <class T, int N>
T fixed_multiply (T val)
{
return val * N;
}
int main() {
std::cout << fixed_multiply<int,2>(10) << '\n';
std::cout << fixed_multiply<int,3>(10) << '\n';
}
Run Code Online (Sandbox Code Playgroud)
据我所知,在编译时调用模板函数(在本例中为<2>和<3>)中分配的int值是在编译时计算的.设计这些机制背后的原因是什么?我理解它是为每个函数创建一个不同的实例,一个乘以2,另一个乘以3.因此,它不能传递变量,它必须传递一个常量.
但为什么这有必要呢?我觉得设计师可以允许运行时执行,因此传递给它的值可能是变量,但很明显设计师认为这样做会更好.
谢谢.