关于在C++ 11中调用模板化函数需要什么,我有点困惑,其中为模板参数提供了默认值.
例如,假设我有以下模板化函数
template <class T = double> void foo()
{
/* Do something */
}
Run Code Online (Sandbox Code Playgroud)
我想在我的代码中的某个地方调用它.所有这些有效的电话都是?
foo(); //Is this OK?
foo<>();
foo<int>();
Run Code Online (Sandbox Code Playgroud)
它与GCC 4.7.2编译得很好,但我不确定它是否是严格正确的C++.我想我的不确定性可能来自<>使用默认模板创建模板化类的实例时使用空尖括号的要求,如下所述:
但我认为在我的情况下,功能括号()是关键区别?
对函数模板的函数调用,其中每个模板参数都是可推导的或具有默认值,可以使用空尖括号或可以省略它们,两种方式都有效.
不同之处在于,如果省略尖括号,则会邀请重载解析来考虑恰好命名的非模板函数,foo并且恰好可以使用相同的(在本例中为空)参数列表进行调用.
这在C++ 11中没有改变.
| 归档时间: |
|
| 查看次数: |
876 次 |
| 最近记录: |