2016-06-25 13 views
2

Dies ist eine Konsolenanwendung in Visual Studio und so wollte ich sehen, was passiert ist, wenn ich eine cout in einer cout aufgerufen. Und es funktioniert irgendwie, aber es entfernt einen Charakter, der irgendwie komisch ist. So entfernt es die Anzahl der Zeichen aus der string in der cout in der main. So entfernt es so viele Zeichen zum Wert der Rückkehr der doPrint() Funktion.C++ string cout Zeichen verloren

Beispiel: wenn der Rückgabewert 1 gibt er „AAAAABLLLLLLLLLL“ wenn der Rückgabewert 2 gibt er „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; 
} 

Es ist nicht, dass von einem Abkommen groß ist, aber ich würde gerne wissen, warum das passiert. Danke schon.

P. S: Ich weiß, ich << statt +

+1

' "BBLLLLLLLLLL" + DoPrint()' tut sicherlich nicht das, was Sie denken, kann es der Fall ist. Lesen Sie über Pointer Arithmetik. –

+1

Dies kann vereinfacht werden zu: int main() {std :: cout << "ABC \ n" + 1; } ' – melpomene

Antwort

1

Nun tun soll, im Grunde, was ist die Reihenfolge der Funktionsaufrufe Zeigerarithmetik und angegeben Auswertung geschieht.

"BBLLLLLLLLLL" + doPrint() 

So

"BBLLLLLLLLLL" + 1 

ergibt

BLLLLLLLLLL 

und

"BBLLLLLLLLLL" + 2 

Ausbeuten

LLLLLLLLLL 

mit std::cout.

Es gilt Funktion Zeigerarithmetik mit dem Zeichen Arrayliteral und „verliert“ Zeichen, wie doPrint() etwas größer als 0 ergibt.

Der Betreiber Vorrang von + höher als <<, daher doPrint() zuerst und Druck genannt AAAAA. So Ihre staement

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

bricht zu

  1. Anruf doPrint()
    1.1. rufen std::cout << "AAAAA" << std::endl;
  2. Anruf "BBLLLLLLLLLL" + 1 aus dem Ergebniswert von doPrint()
  3. Anruf std::ostream& operator<<(std::otream&, const char*)
  4. Anruf std::endl
+0

danke nette Antwort macht Sinn irgendwie: D – Boopy

+0

@ user4568696 Nun, um es wirklich als eine _nice Antwort_Bump bekommen, es wird noch 10 upvotes zu dieser Zeit benötigen :-P ... –

+0

kann ich noch nicht upvote Entschuldigung: ( – Boopy