【问题标题】:what functions are called when passing value to function将值传递给函数时调用了哪些函数
【发布时间】:2010-05-30 21:40:26
【问题描述】:

在 C++ 中,如果将类的对象作为参数传递给函数,则会调用该类的复制构造函数。

我想知道如果对象是非类类型,会调用什么函数?

与C类似,将变量的值或地址传递给函数时会调用什么函数?

感谢和问候!

【问题讨论】:

  • 嗯?非类类型是什么意思?基本类型只是压栈,不需要调用任何函数。

标签: c++ c function parameter-passing


【解决方案1】:

不会调用任何函数;组成对象的字节将被简单地复制到被调用者的正确位置(无论是内存中的位置还是寄存器中的位置)。

【讨论】:

    【解决方案2】:

    仅当对象是按值传递时才调用复制构造函数(并且是非POD 类型)。这是通过引用和const 引用传递对象的常见做法的原因之一,如果您不希望对象被函数更改。

    【讨论】:

      【解决方案3】:

      没有调用函数。

      由于非对象类型没有方法,它们被简单地复制到堆栈中以供您的函数按原样使用。

      【讨论】:

        【解决方案4】:

        这取决于实现,但在某些情况下,如果您将浮点值传递给期望整数类型值的函数,则可能会引发函数调用。 (这是一个实现细节,而不是语言的一部分,这是事实,但同样值得考虑,因为这样的转换通常很慢,无论是否需要函数调用。)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-07
          • 2012-08-06
          • 2019-03-12
          相关资源
          最近更新 更多