小编Inj*_*ilo的帖子

C++中奇怪的解析:int f(int(arg))等效于int f(int arg) - 任何人都可以解释它吗?

当我试图用这样的单个参数构造一个对象时,我的一个同事发现了这个:

char testString[] = "test string";
...
MyClass instance(QString(testString));
Run Code Online (Sandbox Code Playgroud)

他们意识到如果你用一个参数构造函数式习语,它将被解析为一个前向声明的函数,例如

char test[] = "hello";

MyClass instance1(0, test) //constructs an object
MyClass instance2(test) //invalidly forward-declares a function
Run Code Online (Sandbox Code Playgroud)

但他们被他们认为应该工作的东西所困扰,因为它在括号内包含一个函数式转换或单参数构造函数调用.

我已经发现他们的构造函数调用被解析为:

MyClass instance(QString testString);
Run Code Online (Sandbox Code Playgroud)

它不是将变量testString传递给强制转换运算符,而是声明一个具有相同名称参数的函数.我的问题是,它为什么这样做?它似乎允许参数的名称被括号括起来.

c++

2
推荐指数
1
解决办法
170
查看次数

标签 统计

c++ ×1