2016-06-01 2 views
0

Ich frage mich, ob #define nd '\n' eine akzeptable Alternative zu guten alten '\n' ist?#define <anyName> ' n' anstelle von ' n'

#include <iostream> 
#define nd '\n' 
int main(){ 
    std::cout << "Hello World !" << nd ; 
} 

Ich denke, das wäre nützlich beim Drucken Variablen oder Iteratoren, speichert ein paar Tastenanschläge.

+3

Akzeptabel für was? Zur Verschleierung? Wenn Sie einen Zeilenumbruch wünschen, drucken Sie einen Zeilenumbruch. Wenn Sie den Puffer nach einem Zeilenumbruch löschen möchten, verwenden Sie 'std :: endl' –

+3

' std: endl' ist nicht nur '\ n' – P0W

+0

@tas für die einfachere Verwendung" \ n ", ja std :: endl kann verwendet werden wenn es gebraucht wird. – harb7nger

Antwort

1

Es ist, nehme ich an, einige Verwendung für einen Manipulator, die nicht „ohne einen Flush eine neue Zeile schreiben“ nicht Tastatureingaben zu speichern, sondern weil die naive Version (os << '\n' oder os << "\n") kann unerwünschte Polsterung produzieren, wenn os.width() größer als 1, und Schreiben os.put('\n') ist ärgerlich.

So:

template<class charT, class traits> 
std::basic_ostream<charT, traits>& newl(std::basic_ostream<charT, traits>& os) { 
    return os.put(os.widen('\n')); 
} 

In Bezug auf das Makro, das ist einfach sinnlos Verschleierung.

1

Ich frage mich, ob #define nd '\n' ist eine akzeptable Alternative zu guten alten std::endl?

Nicht wirklich. std::endl macht zwei Dinge:

  1. drucken Newline
  2. Flush Strom

Während Ihre Lösung nur die ehemalige tut, so ist es nicht gleichwertig ist.

Auf der anderen Seite, im Vergleich zu Literal '\ n', speichert dieses Makro so wenig Tastenanschläge und erhöht die Verwirrung, dass ich es mehr schaden als nützen würde.

+0

Ja, es ist wahr, ich hätte meine Frage als Ersatz für << "\ n" umformulieren sollen; – harb7nger

1

Nein. Inakzeptabel. Wenn Sie einen Zeilenumbruch wünschen, geben Sie einfach '\n' ein, und wenn Sie auch den Puffer leeren möchten, verwenden Sie std::endl. Niemand, der Ihren Code liest, wird wissen, was Ihr Makro bedeutet, und es wird kein erheblicher Aufwand von Ihnen selbst gespart.

+0

ja einverstanden, ich war neugierig zu wissen, wie nützlich der Ansatz ist. – harb7nger

Verwandte Themen