c ++通过引用和指针传递参数

Vir*_*cks 26 c++ size performance assembly arguments

在c ++中

class bar
{
    int i;
    char b;
    float d;
};

void foo ( bar arg );
void foo ( bar &arg );
void foo ( bar *arg );
Run Code Online (Sandbox Code Playgroud)

这是一个示例类/结构和函数,
我有一些Q.

  • 在'asm',大小,速度中传递参数的第一种和第二种方式之间有什么区别?
  • 在每种情况下如何将参数传递给函数foo(在指针的情况下我知道指针被推到堆栈上)
  • 在传递论据时,在效率方面(速度,大小,优势)哪个更好?
  • 什么是intel'asm'语法对应每种传递参数的方式?

我知道什么是"现代编译器和CPU无关紧要",但如果我们谈论旧CPU或编译器呢?

提前致谢

cni*_*tar 22

指针和引用方法应该是完全可比的(速度,内存使用和生成的代码).

直接传递类会强制编译器复制内存并将bar对象的副本放在堆栈上.更糟糕的是,在C++中,存在与此相关的各种讨厌的位(默认的复制构造函数和诸如此类).

在CI中总是使用(可能是const)指针.在C++中,您应该使用引用.

  • 除了这里提到的差异:http://stackoverflow.com/questions/57483/what-are-the-differences-between-pointer-variable-and-reference-variable-in-c (4认同)
  • 从标准草案2010:"[注意:引用可以被认为是对象的名称.-end note]"pg.179."没有具体说明参考文献是否需要储存",pg.180. (4认同)
  • @edA:请提供标准的引用,证明"引用只是指针的语法变体". (3认同)
  • 不仅具有可比性,而且完全相同。*引用*只是指针*的*语法*变体。 (2认同)
  • 对于指针,引用不是*糖.以这种方式思考它们的人通常会感到很困惑.它们是变量的别名.引用是变量,因为typedef是类型.如果您将引用视为指针,则会因为无法引用引用而感到困惑. (2认同)