Charset Frage
-
@Swordfish sagte in Charset Frage:
@Finnegan sagte in Charset Frage:
wenn die Variable eh nicht constexpr ist
Ein
constexprStringliteral? Wie geht das?Nicht das Literal selbst, sondern die Variable
indicator(constexpr const char* indicator = "[u]";). Gesetzt den Fallstd::strlenwäre ebenfallsconstexpr(theoretisch machbar, aber leider nicht der Fall, müsste man selbst implementieren), kannindicator_lengthdann ebenfallsconstexprsein. So wie ich das sehe, könnte der Compiler am Anfang deiner Funktion ansonsten auch einen eigentlich unnötigenstrlen-Call generieren, der dann jedes mal aufgerufen wird.Letztendlich dürften moderne Compiler jedoch schlau genug sein um auch ohne
constexprzu erkennen, dassindicator_lengthzur Compile-Zeit berechnet werden kann und das auch tun. Besonders beistrlen, wo Compiler meines Wissens schon lange solche Optimierungen machen. Ich hatte ja geschrieben, dass das wegen Konstantenfaltung wohl nicht wirklich nötig ist.Oder habe ich was übersehen/falsch verstanden?
-
@Finnegan sagte in Charset Frage:
Oder habe ich was übersehen/falsch verstanden?
Weiß nicht, für eine constexpr-Funktion müssen doch alle Parameter auch constexpr sein? Aber ein pointer kann nicht constexpr sein soweit ich mich erinnere?
-
@Swordfish sagte in Charset Frage:
Aber ein pointer kann nicht constexpr sein soweit ich mich erinnere?
Aber sicher:
constexpr const void * p = nullptr;

-
@wob Ich steh vielleicht auf einer dicken fetten Leitung, aber da ist doch der pointee constexpr und nicht der pointer.
-
Schau dir mal an:
int i = 42; int main() { constexpr int * p = &i; *p = 0; // geht // p = nullptr; // fails to compile: cannot assign to variable 'p' // with const-qualified type 'int *const' return *p; }Durch mein zusätzliches
constim Vorposting war auch der Pointeeconst.Edit: ich hatte ehrlich gesagt überhaupt nicht über Pointer/Pointee-constness nachgedacht, sollte eigentlich auch mit dem
void * = nullptrein unnützer Spaß gewesen sein.
-
@wob ok, danke.