【问题标题】:c++ Type declaration before function invocation?c++ 函数调用前的类型声明?
【发布时间】: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);没有区别。
  • 我认为它不是重复的。我的问题要求人们帮助识别句法形式,而引用的问题要求比较两种形式。

标签: c++ types syntax


【解决方案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”并进入堆,那么它将是堆栈。
    • 不,也可以是静态存储。
    • 那不需要静态限定符吗?
    • 不。谁说过块作用域?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    相关资源
    最近更新 更多