নিম্নলিখিত ফাংশন বিবেচনা করুন:
void func(bool& flag)
{
if(!flag) flag=true;
}
আমার কাছে মনে হয় যে পতাকাটির বৈধ বুলেটিন মান থাকলে এটি এটি শর্তহীন নির্ধারণের সমতুল্য হবে true
:
void func(bool& flag)
{
flag=true;
}
তবুও জিসিসি বা ঝনঝন উভয়ই এটিকে অপ্টিমাইজ করে না - উভয়ই -O3
অপ্টিমাইজেশন স্তরে নিম্নলিখিতটি উত্পন্ন করে :
_Z4funcRb:
.LFB0:
.cfi_startproc
cmp BYTE PTR [rdi], 0
jne .L1
mov BYTE PTR [rdi], 1
.L1:
rep ret
আমার প্রশ্ন হচ্ছে: এটা ঠিক যে কোড খুব বিশেষ-ক্ষেত্রে দেখা যায় নিখুত গ্রাহ্য, অথবা কোন ভাল কারণে যেমন অপ্টিমাইজেশান অবাঞ্ছিত করা হবে হয় করা হয়, প্রদত্ত যে flag
একটি রেফারেন্স নয় volatile
? এটি কেবল কারণ বলে মনে হতে পারে যে এটি পড়ার সময় flag
কোনওভাবেই true
অপরিজ্ঞাত false
আচরণ ছাড়াই অ - মান - মূল্য থাকতে পারে তবে এটি সম্ভব কিনা তা আমি নিশ্চিত নই।
1
ব্যবহারের নিয়মিত সময় সংকলনের ফলে ঘটে । Godbolt.org/g/swe0tc