传递带括号的 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
,它是 int
的 typedef
,创建临时 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
;
我发现了一段带有奇怪参数的代码,它是一个类型:
#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
,它是 int
的 typedef
,创建临时 int
并分配值 0
。
function1(1, aaaa)
等同于 function1(1, int)
- 您正在尝试将类型作为参数传递,但格式不正确。
在 function1(1,aaaa())
aaaa()
中创建一个临时值 int
,值为 0
。参见例如 C++14 草案 N4140 [expr.type.conv]/2:
The expression
T()
, whereT
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 typeT
;