2017-02-26 6 views
-4

at()とオーバーロードの違いは何ですかoperator[ ]at()が境界チェックを提供し、例外out_of_rangeをスローすることを除いて、実現の違いは何ですか? operator[ ]at()とオーバーロード演算子の相違点C++

実現:

const int LIMIT =100; 
....................... 
int& operator[ ] (int n) const 

{ 
    if(n<0 || n >= LIMIT) 
    { 
     std::cout<<"Error index!"<<std::endl; 
     exit(1); 
    } 
    return arr[ n ]; 
} 

は、あなたが実現at()のアイデアを与えることはできますか?

+1

'operator []'は境界チェックを行いません。境界エラーがあれば、なぜあなたはアプリケーションを終了()するのですか? – PaulMcKenzie

+0

@WhiZTiMいいえ、それは自分のためだけです。違いの私の理解を確認したい。 'at()'を完全に実現するには、例外をスローする必要がありますか? –

+0

@PaulMcKenzieは、私の状態に「スロー」を入れてください。 –

答えて

1

例外的なC++スタイルは、項目1のこの正確なトピックをカバーしています。バインドされたチェックが適用され、[]が範囲外で使用されると未定義の動作を実行する例外がスローされます。私たちは、C++の哲学に沿って使いたいものを自由に選ぶことができます。これは自分が使うものだけを支払うべきです。 at()は、それが実行するチェックのために高価になる可能性があります。

http://www.cplusplus.com/reference/vector/vector/at/

あなたは、このためのgccのような実装を見てみることができます。

+0

答えてくれてありがとう、今私にとってはっきりしている。 –

+2

あなた自身の抽象型に対して[]とat()を実装する場合、これらのセマンティクスを維持することをお勧めします。 –

+0

は、私の努力をもう一度感謝します。 –

関連する問題