【发布时间】:2010-05-30 21:40:26
【问题描述】:
在 C++ 中,如果将类的对象作为参数传递给函数,则会调用该类的复制构造函数。
我想知道如果对象是非类类型,会调用什么函数?
与C类似,将变量的值或地址传递给函数时会调用什么函数?
感谢和问候!
【问题讨论】:
-
嗯?非类类型是什么意思?基本类型只是压栈,不需要调用任何函数。
标签: c++ c function parameter-passing
在 C++ 中,如果将类的对象作为参数传递给函数,则会调用该类的复制构造函数。
我想知道如果对象是非类类型,会调用什么函数?
与C类似,将变量的值或地址传递给函数时会调用什么函数?
感谢和问候!
【问题讨论】:
标签: c++ c function parameter-passing
不会调用任何函数;组成对象的字节将被简单地复制到被调用者的正确位置(无论是内存中的位置还是寄存器中的位置)。
【讨论】:
仅当对象是按值传递时才调用复制构造函数(并且是非POD 类型)。这是通过引用和const 引用传递对象的常见做法的原因之一,如果您不希望对象被函数更改。
【讨论】:
没有调用函数。
由于非对象类型没有方法,它们被简单地复制到堆栈中以供您的函数按原样使用。
【讨论】:
这取决于实现,但在某些情况下,如果您将浮点值传递给期望整数类型值的函数,则可能会引发函数调用。 (这是一个实现细节,而不是语言的一部分,这是事实,但同样值得考虑,因为这样的转换通常很慢,无论是否需要函数调用。)
【讨论】: