我找到了一段带有奇怪参数的代码:
#include <iostream>
using namespace std;
template<class T>
int function1(T count,double)
{
cout<<"function1 is called"<<endl;
return 1111;
}
int main()
{
typedef int aaaa;
function1(1,aaaa());
}
此功能的输出是
函数1被称为
我想知道当一个参数是一个类型时它意味着什么?为什么我应该给函数aaaa()和aaaa没有括号会给编译器错误?
error: expected primary-expression before ‘)’ token
function1(1,aaaa);
^
答案 0 :(得分:3)
T();
其中T
是任何类型,都会创建类型为T
的无名临时文件。创建的对象为value initialized。应用aaaa
typedef
为int
时,会创建一个临时int
,并为其分配值0
。
答案 1 :(得分:3)
function1(1, aaaa)
相当于function1(1, int)
- 你试图将一个类型作为参数传递,这是一个错误的形式。
在function1(1,aaaa())
aaaa()
中创建一个值int
的临时0
。参见例如C ++ 14 draft N4140 [expr.type.conv] / 2:
表达式
T()
,其中T
是简单类型说明符或 typename-specifier ,用于非数组完整对象类型或者(可能是cv-qualified)void类型,创建一个指定类型的prvalue,其值是由值初始化(8.5)类型为T
的对象生成的;