2016-05-11 16 views
-1

で渡す私は最近、コードのレビューから以下のコメント受け取っ:C++スタイル:演算子のオーバーロード、<flavor>

は、演算子オーバーロードの使用は避けてくださいを可能な限り:( のstd ::文字列の使用.appendを使用している場合)および[Cスタイル]ポインタを使用し、代わりに+値または参照渡し=明確にするため

回避の().ASSIGN代わり

これは、このからのナンセンスのこの種との私の最初の実行ではありません部異物レビューア。

動物園のように、いくつかは他の動物と同等です。どのように彼のペットがピアレビューをする価値がないことを上司に知らせるには?ベストプラクティスから章や詩を引用

はその答えの一部ですが、私は(それはあるかもしれないと満足し、広告人身攻撃の攻撃に頼るアウトして)ただ技術的な理由よりも多くを必要としています。アドバイスありがとうございます。

+8

"std :: stringを使用する場合、わかりやすくするために.append()と.assign()の代わりに.assign()を使用してください。" ... ...それはとてもうんざりです...私たちの同情を受け入れる – WhiZTiM

+3

大量の不足があります世界の優れたC++プログラマーあなたはそれほど迷惑ではないどこかで働くことができますか? –

+1

ピアレビューアがJavaの背景から来ているように聞こえ、オペレータの過負荷を嫌うように教えられました。 – NathanOliver

答えて

1

幸いにもあなたのために、全体のドラフト規格は、すべての単一のセクションへの直接リンクしてHTML形式で提供されています。 std::string::assignstd::string::operator=が同一であることを示すことは自明なことです。

21.3.1.6.3 string::assign

basic_string& assign(const basic_string& str); 

     Effects: Equivalent to *this = str 

21.3.1.2/19 string.cons

basic_string& operator=(const basic_string& str); 

     Effects: If *this and str are not the same object, modifies *this

私たちは手紙にこれを実装した場合、それは次のようになります。

value_typeTraits::char_typeある
basic_string& operator=(const value_type* __s) {return assign(__s);} 

を、01のための別名。

3

は、実際には質問の両方の部分のための客観的な理由がありますので、私は近くに投票して不同意です。

std::sortstd::less経由)は、operator<がオーバーロードされていることを前提としています。 std::ostreamは、無料の関数operator<<(std::ostream&, Foo)がオーバーロードされていることを前提としています。 std::accumulateoperator+などと仮定します。要するに、C++標準では、演算子のオーバーロードを想定しています。最後は最悪で、値(T, T&, T&& and T*)を通過する4ウェイの

。移動セマンティクス、一時的な一時停止、メモリリークのリスク(あいまいなセマンティクス)の増加、C++標準の前提条件との互換性がありません。例えば。コピーコンストラクタになることはできませんT*を取る。

+0

私は 'T *'を最悪の方法と呼んでいません。それはすべて意味論の問題です。関数によって変更されるオブジェクトを渡したい場合は、 'T&'としてそれを渡します。関数が何らかの形でオブジェクトのアドレスで動作するようにするには、それを実際にあなたが興味のあるアドレスであることを伝えるために 'T *'として渡します。 – TFM

+0

"要するに、C++標準では、演算子のオーバーロード* "私は、OPのようなコーディング方針を支持する企業は、ペストのような標準的な図書館を避けることを記述していると仮定します。ちょうど勘違い... – ildjarn

関連する問題