C++ Lite 问题 10.19。函数而不是变量声明

标签 c++ constructor

我过去遇到过这个问题 http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.19

我的问题是,写的时候

Foo x(Bar());

为什么它是“声明一个返回 Bar 对象的非成员函数”?我写了就明白了

Foo x(Bar);

但是它认为 Bar() 中的 () 意味着什么?

最佳答案

Bar() 意思是“一个不接受参数并返回 Bar 的函数”。考虑这样一个函数的声明:

Bar GetBar();

如果您从中删除函数名称,剩下的将描述函数类型。使用它的一些示例是在模板参数中;例如你可以这样写:

std::function<int(float)> f1;
std::function<Bar()> f2;

希望这能大致解释语法。现在这在这种特殊情况下意味着什么。当函数类型用作函数参数类型时,它会自动替换为函数指针类型。所以等效(但更清晰)的声明是:

Foo x(Bar(*)());

关于C++ Lite 问题 10.19。函数而不是变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1215342/

相关文章:

c# - 有没有办法用自己发起一个类?

c++ - 简单的跨平台 C++ GUI 控制台——如何?

c++ - 当我将一个字符串放入节点->名称时,为什么会出现段错误(核心已转储)?

c++ - 在 OSX 上使用 CMake 将 Adob​​e 的 XMP 工具包构建为共享库的最简单方法是什么?

c++ - 查找 vector 中位于指定范围内的元素

c++ - 如何将 uint8* 转换为 uint32

c# - 通用构造函数和继承

javascript - JavaScript 中的构造函数

java - 有没有一种方法可以调用从没有自己的构造函数的子类获取参数的父类构造函数?

c# - 通过构造函数链传递 IDisposable 对象