Mat*_*nti 3 c++ constructor class clang
我正在使用clang来使用c ++ 14方言编译我的代码.请看以下示例:
class x
{
int _i;
public:
x(int i)
{
this->_i = i;
}
};
void x()
{
}
void f(class x my_x)
{
// Do something here
}
int main()
{
/*
f(x(33)); // Doesn't work
f(class x(33)); // Doesn't work
*/
// This works:
class x my_x(33);
f(my_x);
typedef class x __x;
f(__x(33));
}
Run Code Online (Sandbox Code Playgroud)
在这里,我有一个名为x
name 的类,其名称与具有相同名称的函数冲突.要区x
分类和x
函数,必须使用class
标识符.这适用于所有情况,但我永远无法找到直接调用构造函数的方法x
.
在前面的例子,我想提供的功能f
与x
通过建立它在旅途中的对象.但是,如果我使用f(x(33))
它将它解释为对函数的格式错误的调用x
,并且如果我使用f(class x(33))
它只会产生语法错误.
有明显的解决方法,但我想知道是否有更优雅的方法比使用临时别名来定义类x或显式实例化一个项目会让我烦恼,因为我只需要调用函数的整个范围在函数调用行中.
也许有一个我不知道的简单语法?
你需要的只是一对括号:
f((class x)(33));
Run Code Online (Sandbox Code Playgroud)
或者对于更多参数,也使用统一初始化:
f((class x){1, 2, 3});
Run Code Online (Sandbox Code Playgroud)