2016-06-25 10 views
2

これはVisual Studioのコンソールアプリケーションですので、coutcoutで呼び出すと何が起こったのか見たいと思っていました。それはまあまあですが、それはちょっと奇妙な文字を取り除きます。したがって、maincoutにあるstringの文字数が削除されます。したがって、それは多くの文字をdoPrint()関数の戻り値に削除します。C++の文字列の文字が失われました

例: 戻り値が1であれば、それが出力されます「AAAAABLLLLLLLLLL」 戻り値が2であれば、それが出力されます「AAAAALLLLLLLLLL」それは取り引きが、私の大きなではありません

#include "stdafx.h" 
#include <iostream> 

int doPrint() 
{ 
    std::cout << "AAAAA" << std::endl; 
    return 1; 
} 

int main() 
{ 
    std::cout << "BBLLLLLLLLLL" + doPrint() << std::endl; 
    int x; 
    std::cin >> x; 
    return 0; 
} 

なぜこれが起こるのか知りたいです。 ありがとうございました。

P.S:私は、私が代わりに+

+1

' "BBLLLLLLLLLL" std::ostream& operator<<(std::otream&, const char*)

  • コールの結果値からstd::cout << "AAAAA" << std::endl;
  • コール"BBLLLLLLLLLL" + 1を呼び出す+ doPrintは()'確かにあなたはそれがないと思うかもしれ何をしません。ポインタaritmethicsについて読んでください。 –

  • +1

    これは 'int main(){std :: cout <<" ABC \ n "+ 1; } – melpomene

    答えて

    1

    ウェルの<<を行う必要があります知っている、基本的に何が起こるかポインタ演算や関数呼び出しの指定された評価順序です。

    "BBLLLLLLLLLL" + doPrint() 
    

    ので

    "BBLLLLLLLLLL" + 1 
    

    利回り

    BLLLLLLLLLL 
    

    "BBLLLLLLLLLL" + 2 
    

    を生み出します

    std::cout

    それはリテラル文字列で関数ポインタ演算を適用し、doPrint()0よりも大きな何かを生み出すようは、文字を「失い」。

    +の演算子優先度は<<より高く、したがってdoPrint()が最初に呼び出され、AAAAAが出力されます。

    1. コールdoPrint()
      1.1へのダウンだからあなたstaement

      std::cout << "BBLLLLLLLLLL" + doPrint() << std::endl; 
      

      休憩。 doPrint()

    2. コールstd::endl
    +0

    おかげで素敵な答えがちょっと意味をなさない:D – Boopy

    +0

    @ user4568696まあ、実際にそれを_niceの答えとしてぶつかるためには、今度は別の10のアップボトムが必要になります:-P ... –

    +0

    私はupvoteまだ申し訳ありません: ( – Boopy

    関連する問題