Aşağıdaki işlevi düşünün:
void func(bool& flag)
{
if(!flag) flag=true;
}
Bana öyle geliyor ki, bayrak geçerli bir boole değerine sahipse, bu, şu şekilde koşulsuz olarak ayarlanmasına eşdeğer olacaktır true
:
void func(bool& flag)
{
flag=true;
}
Yine de ne gcc ne de clang bunu bu şekilde optimize etmez - her ikisi de aşağıdakileri -O3
optimizasyon düzeyinde üretir :
_Z4funcRb:
.LFB0:
.cfi_startproc
cmp BYTE PTR [rdi], 0
jne .L1
mov BYTE PTR [rdi], 1
.L1:
rep ret
Benim sorum şudur: kod optimize etmek ister ya da bu tür optimizasyon istenmeyen nedenlerine herhangi iyi nedenler vardır çok özel bir durumdur sadece budur, yani verilen flag
bir referans değil volatile
? Görünen o ki tek neden , okuma noktasında tanımlanmamış bir davranış olmaksızın flag
bir true
-veya- false
değere sahip olabilmesidir , ancak bunun mümkün olup olmadığından emin değilim.
1
. godbolt.org/g/swe0tc