Zeilenumbrüche
-
Hey Leute ich wollte euch fragen ob es eine Regel für meinen Code gibt die bestimmt das ich nach jeder neuen zeile ein << Hinzufügen muss oder es auch so ok ist:
std::ofstream properties; properties.open("anwendungs.properties"); properties << "....\n" /* << ?*/ "....\n" "....\n" "....\n" "....\n" "....\n"; properties.close();
-
Das Verhalten dürfte praktisch equivalent sein. In deinem Code werden direkt hintereinanderliegende String-Literale zu einem einzigen aneinandergehängt, welches dann ausgegeben wird. Wenn du jedes mal eine neue insertion nutzt, d.h.
<<öfter wiederholst, wird jede Zeile einzeln ausgegeben. Der Effekt dürfte der gleiche sein - aber wie immer ist Konsequenz das Zauberwort, mische das möglichst nicht in einem Projekt!Persönlich finde ich es lesbarer wie du es schreibst, aber auch nur wenn ordentlich formattiert wird.
properties << "....\n" "....\n" "....\n" "....\n" "....\n" "....\n";Vielleicht wären auch rohe Stringliterale für einige Szenarieren nützlicher:
properties << R"(.... .... .... .... .... .... )";
-
Hier eine Möglichkeit, rohe Stringliterale und Einrückung zu benutzen:
#include <iostream> #include <cassert> template <typename T, size_t N> struct constexpr_string { constexpr constexpr_string() =default; constexpr constexpr_string(constexpr_string const&) =default; constexpr constexpr_string(constexpr_string&&) =default; T data[N] = {}; size_t n = 0; constexpr void push_back(T x) { data[n++] = x; data[n] = T(); } constexpr operator const T*() const { return &data[0]; } }; template <size_t N> constexpr constexpr_string<char, N> gobble(const char (&arr)[N]) { assert(arr[0] == '\n'); size_t spaces = 0; while (arr[spaces+1] == ' ') ++spaces; size_t column = 0; bool eat_spaces = true; constexpr_string<char, N> res; for (const char *p=arr+1; *p; ++p) { if (*p == '\n') { column = 0; res.push_back(*p); eat_spaces = true; continue; } if (++column > spaces) eat_spaces = false; if (*p != ' ') eat_spaces = false; if (!eat_spaces) res.push_back(*p); } return res; } int main() { constexpr auto r = gobble(R"( a b c)"); std::cout << r << '\n'; }