2017-03-22 2 views
-1

に引数としてクラス定数を渡すC++でが機能

void A(const class1 a); 

void A(const class1 &a); 

の違いは何ですか。

私はこれらの2つを区別できません。

+7

あなたは[良いC++の本](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)を使用することができるように聞こえます – NathanOliver

+2

提案のための助けを求めること –

+3

よく一方の宣言には '&'が含まれ、他方の宣言には含まれません。それは、非常に大きな差を生みます。初心者の本があなたに伝えるものです。 –

答えて

3

主な違いは、

A(const class1 a); 

A(const class1 &a); 

が作成されません

ながら(メモリおよび計算の観点の両方から)高価になることができ A内部 aのローカルコピーを作成することですコピー。

したがって、通常はリファレンス(第2版)を渡すことが好ましい方法です。

+1

最初の形式は必ずしも高価ではありません。すべてがclass1のサイズに依存します。これは参照よりも大きいので、あなたが言うことは真です。それ以外の場合はそうではありません。 – basslo

+0

@basslo:それは正しいので、私は "高価なことができる"と書いたのです。しかし、私の経験では、クラスをコピーすることは、参照をコピーするよりも(メモリ消費と計算の観点から)安価であることはありません。これは、クラスのサイズに依存するだけでなく、主にコピーコンストラクタが行うものに依存します。 –

+0

'sizeof(type)<= sizeof(void *)'ならば、参照や値渡しは問題になりません。 – NathanOliver