Was wird in diesem Beispiel aus den Cpp Core Guidelines verschwendet?

7

Was ist in dem Beispiel aus den Cpp Core Guidelines verschwendet?

  

S.9: Verschwenden Sie keine Zeit oder Platz

     

[...]

%Vor%      

Ja, das ist ein Beispiel aus dem Produktionscode. Wir überlassen es dem Leser herauszufinden, was verschwendet wird.

von Ссылка

    
hamster on wheels 25.10.2016, 19:27
quelle

4 Antworten

19

strlen wird bei jeder Iteration der Schleife berechnet.

    
user31264 25.10.2016, 19:29
quelle
8

strlen wird jedes Mal aufgerufen, wenn die Schleifenbedingung überprüft wird, und benötigt O (n) Zeit pro Aufruf, so dass die Gesamtzeit für die Schleife O (n ^ 2) ist.

    
Brian 25.10.2016 19:29
quelle
7

Es wird viel Zeit verschwendet und ein Segmentierungsfehler kann auftreten, wenn der Autor des Codes s , nicht i in der Schleife erhöht:

%Vor%     
ForceBru 25.10.2016 19:30
quelle
4

Wie andere Fragesteller bereits festgestellt haben, wird strlen(s) mehrmals aufgerufen, weil es sich in der Bedingung befindet, was bedeutet, dass es stattdessen zwischengespeichert und wiederverwendet werden sollte.

Aber strlen(s) muss eigentlich gar nicht aufgerufen werden! s ist (oder ist implizit konvertierbar) in ein Array mit nullter Endung char , da das strlen erwartet. Also können wir genau diese Eigenschaft für unsere eigene Schleife verwenden.

%Vor%     
Quentin 25.10.2016 20:18
quelle

Tags und Links