c++ - 这是多么令人烦恼的解析?

标签 c++ most-vexing-parse

我正在经历这个 article

在第 3 项中有一个声明

// C++98 
rectangle       w( origin(), extents() );       // oops, vexing parse

以上是一个最令人烦恼的解析。如果我做了这样的事情

struct origin
{
};
struct Rectangle
{
    Rectangle(const origin& s)
    {
    }
};

声明

 Rectangle s(origin());    

工作正常,不像一个令人烦恼的解析。 为什么作者说这是一个令人讨厌的解析。这是打字错误还是我遗漏了什么?

最佳答案

Rectangle s(origin()); 也是一个令人烦恼的解析。它声明了一个返回rectangle 的函数s,并将返回origin 的函数指针作为参数指针。不确定“工作正常”是什么意思。

rectangle w( origin(), extents() ); 声明一个函数 w 返回 rectangle 并接受参数:指向函数返回的指针origin,以及指向函数返回 extents 的指针。

更多详情 see this question或浏览下的其他问题标签。

关于c++ - 这是多么令人烦恼的解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31574575/

相关文章:

c++ - 'operator==' 的命名空间限定重载

c++ - Makefile:无需执行任何操作

c++ - 如何在 C++ 中将结构写入文件并读取文件?

c++ - 什么是复制省略和返回值优化?

c++ - 如何正确使用 vector 范围构造函数?

c++ - 了解 C++ 编译器

c++ - 允许构造函数调用私有(private)方法的默认参数

c++ - 用托管类包装 C++ DLL

c++ - 为什么用()声明对象时不调用构造函数?

c++ - 默认构造函数的好奇心