1

たとえば、整数を定義したいとします。私はC++で2つの方法でそれを行うことができます:

  1. int a = 10;
  2. int a(10);

2つに違いはありますか、それとも単に好みの問題ですか?

4

3 に答える 3

4

2つに違いはありますか、それとも単に好みの問題ですか?

などの基本的なデータ型を扱っている限り、int違いはありません。これは単なる好みの問題であり、個人的には最初の形式を選択しますが、それは私の好みです。ただし、クラス タイプを初期化する場合は、違いがある場合があります。

最初の形式はcopy-initializationと呼ばれ、概念的には、最初に初期化子から一時オブジェクトを構築し (適切な変換シーケンスが利用可能な場合)、次にその一時オブジェクトから宣言されているオブジェクトをコピー構築 (または移動構築) することによって機能します。

コンパイラは、C++11 標準のパラグラフ 12.8/31 に従ってコピー省略を実行し、このフォームを直接初期化に実質的に最適化できることに注意してください (次のパラグラフを参照)。ただし、これが行われる場合、初期化が有効になるためには、実行可能なコピー コンストラクターまたはムーブ コンストラクターがまだ存在している必要があります。

2 番目の形式はdirect-initializationと呼ばれ、直接宣言されているオブジェクトを構築し、初期化式を引数としてコンストラクターに渡すことによって機能します。

于 2013-05-29T22:43:03.360 に答える
0

基本型 (int、float、double、long、char など) の場合、2 つのオプションを入力するのに必要な文字数を除けば、コンパイラは両方のオプションに対してまったく同じことを行う必要があります。したがって、その観点から、それは単なる選択の問題です。

明らかに、あなたが働いている会社、あなたがボランティアをしているオープンソース プロジェクト、またはあなたが教えられている学校のスタイル ガイドは、どちらかが他のものよりも優先されると言うかもしれません.

于 2013-05-29T22:42:03.467 に答える
0

プリミティブ型との違いはありません。最初の型はコピー初期化と呼ばれ、2 番目の型は直接初期化と呼ばれます。クラスを初期化するときにこれら 2 つのメソッドがどのように異なるかについて、Google を使用して調べてください。

于 2013-05-29T22:46:13.013 に答える