gpt4 book ai didi

C++ 嵌套构造函数调用与函数声明

转载 作者:搜寻专家 更新时间:2023-10-31 00:03:02 26 4
gpt4 key购买 nike

以下代码部分中标记为“版本 1”和“版本 2”的代码片段有什么区别:

int main() {
using namespace std;
typedef istream_iterator<int> input;

// version 1)
//vector<int> v(input(cin), input());

// version 2)
input endofinput;
vector<int> v(input(cin), endofinput);
}

据我所知,“版本 1”被视为函数声明。但我不明白为什么也不明白结果函数的参数是什么 v返回类型 vector<int>是。

最佳答案

why

因为标准或多或少地说,任何可能被解释为函数声明的东西在任何上下文中都将是,无论如何。

what the arguments... are

你可能不相信,但这是真的。 input(cin) 被视为input cin;在这一点上,括号是允许的,而且根本没有意义。但是,input() 不被视为声明类型为 input 且没有名称的参数;相反,它是 input(*)() 类型的参数,即指向不带参数并返回 input 的函数的指针。显然, (*) 部分在声明类型时是不必要的。我猜出于同样的原因,当您使用函数名称初始化函数指针时 & 是可选的...

另一种解决这个问题的方法是利用我们单独声明值的事实来证明跳过 typedef 是合理的:

istream_iterator<int> start(cin), end;
vector<int> v(start, end);

另一种方法是以函数声明不允许的方式添加括号:

vector<int> v((input(cin)), input());

有关更多信息,请谷歌“c++ 最烦人的解析”。

关于C++ 嵌套构造函数调用与函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6939986/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com