传递带括号的 typedef 作为参数

Passing typedef with parenthesis as an argument

我发现了一段带有奇怪参数的代码,它是一个类型:

#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()); 
}

这个函数的输出是

function1 is called

我想知道参数是类型是什么意思?为什么我应该给函数 aaaa() 而 aaaa 不带括号会导致编译器错误?

error: expected primary-expression before ‘)’ token
  function1(1,aaaa); 
                  ^

T(); 其中 T 是任意类型,创建类型为 T 的无名临时对象。创建的对象将是 value initialized。应用于 aaaa,它是 inttypedef,创建临时 int 并分配值 0

function1(1, aaaa) 等同于 function1(1, int) - 您正在尝试将类型作为参数传递,但格式不正确。

function1(1,aaaa()) aaaa() 中创建一个临时值 int,值为 0。参见例如 C++14 草案 N4140 [expr.type.conv]/2:

The expression T(), where T is a simple-type-specifier or typename-specifier for a non-array complete object type or the (possibly cv-qualified) void type, creates a prvalue of the specified type, whose value is that produced by value-initializing (8.5) an object of type T;