在c++;,参数被复制到相应的参数。这是初始化还是分配? 在C++中函数调用中,参数被复制到相应的参数。这是初始化还是赋值?

在c++;,参数被复制到相应的参数。这是初始化还是分配? 在C++中函数调用中,参数被复制到相应的参数。这是初始化还是赋值?,c++,function-call,C++,Function Call,那么参数是按值进行的,它们是复制构造的(即初始化)。参数传递语义是初始化语义。也就是说,将调用类的复制/移动构造函数。初始化:(请检查) 5.2.2函数调用 调用函数时,应使用相应的参数初始化每个参数。[此类初始化是 当函数 调用时,具有对象类型的参数应具有 完全定义的对象类型。[这仍然允许将参数设置为 指向不完整类类型的指针或引用。但是,它阻止 传递值参数的类类型不完整。] 一个参数的初始化,一个实现可以避免 通过结合表上的转换构建临时表 关联的论据和/或与 参数的初始化。参数的生存期在 在其

那么参数是按值进行的,它们是复制构造的(即初始化)。

参数传递语义是初始化语义。也就是说,将调用类的复制/移动构造函数。

初始化:(请检查)

5.2.2函数调用

调用函数时,应使用相应的参数初始化每个参数。[此类初始化是 当函数 调用时,具有对象类型的参数应具有 完全定义的对象类型。[这仍然允许将参数设置为 指向不完整类类型的指针或引用。但是,它阻止 传递值参数的类类型不完整。] 一个参数的初始化,一个实现可以避免 通过结合表上的转换构建临时表 关联的论据和/或与 参数的初始化。参数的生存期在 在其中定义它的函数返回。初始化和 每个参数的销毁都发生在调用的上下文中 功能。[构造函数、转换函数或 在调用函数的调用点检查析构函数。如果 函数参数的构造函数或析构函数抛出 异常情况下,对处理程序的搜索在调用的范围内开始 函数;特别是,如果调用的函数具有 具有可处理异常的处理程序的函数try块, 不考虑此处理程序。]


并不总是调用复制构造函数
myfunc(MyClass(3))
将只调用MyClass(int)构造函数。您(几乎总是)是对的。我相信这实际上是一个编译器优化,尽管几乎所有的编译器都会这样做;)g++-O0仍在进行这种“优化”。我只是说编译器会这样做,因为创建临时对象然后调用复制构造函数来创建另一个对象实际上是愚蠢的。不过,我不完全确定该语言的标准是否需要实现来做到这一点。尽管如此,您是对的,复制构造函数并不总是被调用。。。