I have several questions
1)
#include <iostream>
template<typename T>
void func(T t){}
int main()
{
int i;
double d;
std::cin>>i;
if(i==1)
func(i);
else
func(d);
}
什么时候(运行时/编译时)需要生成所需的函数?实例化后有多少个版本的函数?
2) 以下两种方式之间有什么区别:
template<typename T> auto func(T t){return 0;}
并且
template<typename T> constexpr auto func(T t){return 0;}
据我理解,template
在编译时起作用,constexpr
也是如此。为什么(以及何时)需要在模板中使用constexpr
?
int arr[func(42) + 1];
。大致上,对于函数而言,constexpr
的意思是“这个函数足够简单和自包含,以至于编译器可以在编译时执行它;如果参数在编译时已知,则结果也可以在编译时得出”。这与template
无关 - 您可以轻松地拥有一个非模板的constexpr
函数或一个constexpr
函数模板。 - Igor Tandetnik