নিম্নলিখিত ফাংশন বিবেচনা করুন:
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