Jakby zasada

Standard języka programowania C++ pozwala kompilatorom tego języka na zastosowanie dowolnej transformacji optymalizującej do programu podczas kompilacji, pod warunkiem, że takie optymalizacje nie powodują zmian w „obserwowalnym zachowaniu” programu, jak określono w standardzie ; oznacza to głównie, że wszelkie akcje wykonywane przez program w jego środowisku występują w określonej kolejności. Zasada ta jest powszechnie nazywana zasadą „jak gdyby” .

Reguła ma trzy główne wyjątki, w których dozwolone są optymalizacje zmieniające zachowanie. Po pierwsze, programy wykazujące nieokreślone zachowanie są wyłączone; ponieważ obserwowalne zachowanie i tak nie jest dobrze zdefiniowane, każda transformacja jest ważna. Pozostałe dwa wyjątki dotyczą kopiowania obiektów i nazywane są eliminacją kopiowania oraz optymalizacją wartości zwracanej .

Efekt reguły as-if zależy od konkretnej implementacji kompilatora. Na przykład w kompilatorze Microsoft C++ powoduje to pominięcie pewnych optymalizacji, takich jak zmiana kolejności instrukcji wokół wywołań funkcji bibliotecznych , ponieważ takie wywołania mogą powodować akcje wejścia/wyjścia lub dostępy do komórek pamięci oznaczonych jako volatile i zmiany kolejności tych zmienić obserwowalne zachowanie.

Reguła „jak gdyby” nie jest specyficzna dla C++; wiele innych języków programowania , w tym C , Rust , Go , Ocaml itp. ma podobną zasadę, aby umożliwić optymalizację (zwłaszcza wstawianie ).