This question already has answers here:
C++'s most vexing parse again [duplicate]

(2个答案)


6年前关闭。




这个标题可能并不完全准确-它是基于我对所发生情况的最佳猜测,我认为它比“有人可以解释此代码所发生的情况更好”吗?

无论如何,我有以下代码:
class Class1 { };

class Class2
{
public:
   Class2(Class1 other){}
};

void func(Class2 x){}

int main()
{
   Class2 x(Class1());
   func(x);             //Compile Error

   Class1 y1;
   Class2 y2(y1);
   func(y2);            //Compiles fine
   return 0;
}

因此,当我编译它时,标记为“Compile Error”的行在g++ 4.9中提供了一个错误:
main.cpp: In function ‘int main()’:
main.cpp:14:10: error: could not convert ‘x’ from ‘Class2 (*)(Class1 (*)())’ to ‘Class2’
    func(x);
          ^

clang++ 3.4.1提供了类似的错误。

我最好的猜测是,它认为“x”是某种返回Class2的函数,而不是返回Class2本身的函数,但是...为什么会这样?我认为对Class1的调用会返回一些匿名的Class1,该匿名类将传递给Class2的构造函数。

最佳答案

Class2 x(Class1());是函数声明,是由于令人讨厌的解析(在这里使用Google技巧)。

选择:

Class2 x((Class1()));
Class2 x{Class1()};

09-25 17:01
查看更多