Dem Test wurde StringLen hinzugefügt, und die Zeichenkette wurde anders initialisiert. In der Dokumentation steht das eine, das tatsächliche Verhalten ist anders. Und der Puffer zeigt in diesem Fall 0 statt 260 an.
In der Dokumentation ist angegeben, wann 0 zurückgegeben wird, und es ist für den angegebenen Fall angemessen
Die Dokumentation stimmt überhaupt nicht mit dem aktuellen Verhalten überein!
Dokumentation: Ein Wert von 0 bedeutet, dass die Zeichenfolge eine Konstante ist und der Inhalt des Puffers nicht geändert werden kann.
Die Zeichenkette wird mit der Konstante "_" initialisiert, und der Compiler betrachtet die Zeichenkette bedingt (aus Effizienzgründen) als Konstante - warum nicht? Warum ist das ein Widerspruch? Dies gilt umso mehr, als mit ihm keine weiteren Operationen durchgeführt werden.
Ich denke, ich habe es mit Nummer 260, der Compiler selbst weist die anfängliche Größe desStringBufferLen Puffers zu 260. Wenn die Länge der Zeichenkette kleiner als 260 ist, wird StringBufferLen 260 ausgeben, nicht die tatsächliche Länge der Zeichenkette! Wenn die Länge der Zeichenkette größer als 260 ist, wird der tatsächliche Wert der Zeichenkette gedruckt.
Wenn wir also die Funktion StringBufferLen mit einer Stringlänge von weniger als 260 Zeichen verwenden, erhalten wir nicht die tatsächliche Stringlänge, sondern immer 260. Dies muss ein Fehler sein. Sobald die Länge 260 Zeichen überschreitet, erhalten wir die tatsächliche Länge der Zeichenfolge.
p.s. Da die Dokumentation nicht mehr aktuell ist, ist sie sehr irreführend.
Das heißt, dass wir bei Verwendung der Funktion StringBufferLen bei einer Stringlänge von weniger als 260 Zeichen nicht die tatsächliche Stringlänge erhalten, sondern immer 260. Dies muss ein Fehler sein. Sobald die Länge 260 Zeichen überschreitet, wird die tatsächliche Länge angezeigt.
Streng genommen die Länge der Zeichenkette: StringLen und Pufferlänge: StringBufferLen sind eher seltene Funktionen. Und im Allgemeinen dürfen sie nicht übereinstimmen.
Das sind zwei zumindest fragwürdige Fälle:
voidOnStart()
{
string s1 = "_";
Print(StringBufferLen(s1)); //(1)//Ожидалось 260 вместо 0 - строка s1 далее может быть увеличенаStringInit(s1,1,'_');
conststring s2 = s1;
Print(StringBufferLen(s2)); //(2)//Ожидалось 0\1 вместо 260 - строка s2 константная и не может быть далее увеличена
}
Der Fehler bei der Optimierung des Strategietesters wurde noch nicht behoben.
Bitte korrigieren.
Die Optimierungseinstellung, die ich verwende, ist Gleichgewicht + Schärfeverhältnis, aber es wird ein anormaler Optimierungswert angezeigt, wie auf dem Screenshot zu sehen ist, und eine normale Optimierung aufgrund dieses anormalen Wertes wird bei der nachfolgenden Optimierungsgenerierung erzeugt. Das ist unmöglich.
Die Optimierung, die ich verwende, ist Gleichgewicht + Schärfe, aber der anormale Optimierungswert wird wie im Screenshot angezeigt und die normale Optimierung aufgrund dieses anormalen Wertes wird bei der nachfolgenden Optimierungsgenerierung erzeugt. Dies ist nicht möglich
Für eine konstante Zeichenkette wird mehr Speicher als nötig zugewiesen (ihre Länge kann im Prinzip nicht erhöht werden)
Für eine nicht konstante Zeichenkette wird kein zusätzlicher Speicherplatz zugewiesen (wenn die Länge erhöht wird, ist eine neue Speicherzuweisung erforderlich)
Wenn ein Benutzer eine Zeichenkette mit StringInitInit initialisiert, wird mehr Speicher zugewiesen als benötigt, da die Puffergröße explizit vom Benutzer festgelegt wird und in den meisten Fällen nicht erhöht wird (der Benutzer hat bereits darüber nachgedacht, welchen endgültigen Puffer er benötigt und dessen Größe explizit festgelegt)
Für eine konstante Zeichenkette wird mehr Speicher als nötig zugewiesen (ihre Länge kann im Prinzip nicht erhöht werden)
Für eine nicht konstante Zeichenkette wird kein zusätzlicher Speicher zugewiesen (wenn ihre Länge erhöht wird, ist eine neue Speicherzuweisung erforderlich).
Wenn ein Benutzer eine Zeichenkette mit StringInitInit initialisiert, wird mehr Speicher als nötig zugewiesen, da die Größe des Puffers explizit vom Benutzer angegeben wird und in den meisten Fällen nicht vergrößert wird (der Benutzer hat bereits darüber nachgedacht, welchen Endpuffer er benötigt und hat dessen Größe explizit angegeben)
Die Vorabzuweisung der Größe von Puffern für Strings ist eine interne Angelegenheit des Compilers.
Wir werden die Handhabung von Zeichenketten noch viele Male ändern.
Dem Test wurde StringLen hinzugefügt, und die Zeichenkette wurde anders initialisiert. In der Dokumentation steht das eine, das tatsächliche Verhalten ist anders.
Und der Puffer zeigt in diesem Fall 0 statt 260 an.
In der Dokumentation ist angegeben, wann 0 zurückgegeben wird, und es ist für den angegebenen Fall angemessen
Die Dokumentation gibt an, wann 0 zurückgegeben wird, und ist für den angegebenen Fall angemessen
Die Dokumentation stimmt überhaupt nicht mit dem aktuellen Verhalten überein!
Und die Ergebnisse sind unterschiedlich ))Was ist der Unterschied zwischen den beiden Arten der Initialisierung?
Und es ist nicht klar, woher die linke Zahl 260 kommt.
Die Dokumentation stimmt überhaupt nicht mit dem aktuellen Verhalten überein!
Dokumentation: Ein Wert von 0 bedeutet, dass die Zeichenfolge eine Konstante ist und der Inhalt des Puffers nicht geändert werden kann.
Die Zeichenkette wird mit der Konstante "_" initialisiert, und der Compiler betrachtet die Zeichenkette bedingt (aus Effizienzgründen) als Konstante - warum nicht? Warum ist das ein Widerspruch? Dies gilt umso mehr, als mit ihm keine weiteren Operationen durchgeführt werden.
Und im Allgemeinen ist nicht klar, woher die linke Zahl 260 kommt.
Der Moderator erläuterte, woher sie stammt und warum sie im Falle von
erscheint nicht - Grund zur Überprüfung
Der Moderator erläuterte, woher
Ich denke, ich habe es mit Nummer 260, der Compiler selbst weist die anfängliche Größe desStringBufferLen Puffers zu 260.
Wenn die Länge der Zeichenkette kleiner als 260 ist, wird StringBufferLen 260 ausgeben, nicht die tatsächliche Länge der Zeichenkette!
Wenn die Länge der Zeichenkette größer als 260 ist, wird der tatsächliche Wert der Zeichenkette gedruckt.
Wenn wir also die Funktion StringBufferLen mit einer Stringlänge von weniger als 260 Zeichen verwenden, erhalten wir nicht die tatsächliche Stringlänge, sondern immer 260.
Dies muss ein Fehler sein.
Sobald die Länge 260 Zeichen überschreitet, erhalten wir die tatsächliche Länge der Zeichenfolge.
p.s. Da die Dokumentation nicht mehr aktuell ist, ist sie sehr irreführend.
Das heißt, dass wir bei Verwendung der Funktion StringBufferLen bei einer Stringlänge von weniger als 260 Zeichen nicht die tatsächliche Stringlänge erhalten, sondern immer 260.
Dies muss ein Fehler sein.
Sobald die Länge 260 Zeichen überschreitet, wird die tatsächliche Länge angezeigt.
Streng genommen die Länge der Zeichenkette: StringLen und Pufferlänge: StringBufferLen sind eher seltene Funktionen. Und im Allgemeinen dürfen sie nicht übereinstimmen.
Das sind zwei zumindest fragwürdige Fälle:
Die Ausführungsergebnisse zeigen, dass der Compiler entgegen der Logik handelt:
Die Ausführungsergebnisse zeigen, dass der Compiler entgegen der Logik handelt:
Die Vorabzuweisung der Größe von Puffern für Strings ist eine interne Angelegenheit des Compilers.
Wir werden die Handhabung von Zeichenketten noch viele Male ändern.