c++ 函数调用前的类型声明?

Posted

技术标签:

【中文标题】c++ 函数调用前的类型声明?【英文标题】:c++ Type declaration before function invocation? 【发布时间】:2018-03-14 21:57:50 【问题描述】:

我正在查看 v8 javascript 引擎 (here's the github link) 的源代码,在 parsing.cc 的第 33 行,函数中有这样的语句:

Parser parser(info);

我只习惯在赋值前看到这样的类型声明,比如:

Parser myparser = Parser(...);

那么第一个例子是做什么的呢?为什么不直接调用 parser(info) 而不使用类型声明?

提前谢谢你。

【问题讨论】:

这不是调用Parser 构造函数吗?我的 C++ 生锈了,但这看起来就像一个变量初始化。 这和int n(5);没有区别。 相关/欺骗:***.com/questions/4470553/… 我认为它不是重复的。我的问题要求人们帮助识别句法形式,而引用的问题要求比较两种形式。 【参考方案1】:

线

Parser parser(info);

通过调用以info 作为参数的构造函数来构造一个Parser 对象。

这种构造对象的方法叫做direct initialization。

您也可以使用表格

Parser parser = Parser(info);

构造对象。这种构造对象的方法称为copy initialization。

【讨论】:

【参考方案2】:

您正在堆栈上构造 Parser 类型的对象。 (或者正如 cmets 所说,取决于块范围,这可能是一个全局变量,无法从可用信息中辨别出来,但很可能是堆栈:) Object creation on the stack/heap?

【讨论】:

你怎么知道它在堆栈上? @juanchopanza 如果它不使用“new”并进入堆,那么它将是堆栈。 不,也可以是静态存储。 那不需要静态限定符吗? 不。谁说过块作用域?

以上是关于c++ 函数调用前的类型声明?的主要内容,如果未能解决你的问题,请参考以下文章

C++基础入门丨6. 函数——定义调用和声明

C++基础入门丨6. 函数——定义调用和声明

C++基础入门丨6. 函数——定义调用和声明

为啥在 C++ 中调用原始类型的构造函数是合法的?

将变量声明为“类”数据类型,而不调用“类”构造函数?

c++ bool型函数的调用