2015-09-21 12 views
6

in C/C++, die zweite Anweisung inUndefiniertes Verhalten, oder: Hat Swift Sequenzpunkte?

int i = 0; 
int j = i++ + i++ + ++i; 

ruft sowohl

  • unspezifiziert Verhalten, weil die Reihenfolge der Auswertung der Operanden nicht spezifiziert ist, und
  • undefiniertes Verhalten , weil die Nebenwirkungen auf das gleiche Objekt i relativ zueinander nicht sequenziert sind.

Siehe zum Beispiel

, nun da Swift als sicher Sprache entwickelt wurde, was die hier entsprechende Situation? Ist das Ergebnis von

var i = 0 
let j = i++ + i++ + ++i 

gut definiert? Kann man aus der Sprachreferenz im Swift Buch schließen, dass j == 4?

+2

Dies ist eine gute Frage zu stellen, aber leider habe ich das Gefühl, dass die Antwort derzeit "niemand weiß" ... – jtbandes

+0

@jtbandes: Danke (aber jemand stimmt nicht zu :) - Sie haben wahrscheinlich Recht. Ich habe dies jetzt im Apple Developer Forum gepostet, vielleicht gibt es ein Feedback: https://forums.developer.apple.com/thread/20001. –

+1

Super - Chris Lattner hat geantwortet. Ich habe insgeheim gehofft, dass die Antwort "von links nach rechts" war :) – jtbandes

Antwort

5

Die Frage von Apple Entwickler und Swift Designer Chris Lattner in der Apple Developer Forum https://forums.developer.apple.com/thread/20001#63783 beantwortet wurde:

Ja, das Ergebnis dieses Ausdrucks wird immer 4. Swift wertet Ausdrücke werden von links nach rechts, es ist nicht wie C nicht definiert oder Implementierung

Chris auch hinzugefügt Verhalten definiert:

Das heißt, wenn Sie Code so schreiben, jemand versucht, es zu halten wird wahrscheinlich nicht sehr glücklich sein, mit Ihnen

Einverstanden! Es war ein extremes Beispiel, um das Problem zu demonstrieren.

+1

Ein Update: per jetzt Open Source [Swift Evolution] 9https: //github.com/apple/swift-evolution/blob/master/proposals/0004- remove-pre-post-inc-decrement.md) process, '--' und' ++ 'sollen aus zukünftigen Swift-Versionen entfernt werden. – rickster

+0

@rickster: Du hast Recht, danke für das Hinzufügen der Info hier! - Aber selbst ohne diese Operatoren bleibt die Tatsache, dass Swift Ausdrücke von links nach rechts bewertet, interessant (meiner Meinung nach). –

Verwandte Themen