এখানে কি হচ্ছে?
if(int a = Func1())
{
// Works.
}
if((int a = Func1()))
{
// Fails to compile.
}
if((int a = Func1())
&& (int b = Func2()))
)
{
// Do stuff with a and b.
// This is what I'd really like to be able to do.
}
2003 স্ট্যান্ডার্ডের 6.4.3 বিভাগে সিলেকশন স্টেটমেন্ট শর্তে ঘোষিত ভেরিয়েবলের কীভাবে শর্ত দ্বারা নিয়ন্ত্রিত সাবস্টেটমেন্টগুলির শেষ অবধি প্রসারিত হবে তা প্রসারণ করা হয়। তবে আমি ঘোষণার আশেপাশে প্রথম বন্ধনীর মুখোমুখি না হতে পারার বিষয়ে যেখানে কিছু বলেছে তা আমি দেখতে পাই না বা শর্ত অনুযায়ী কেবলমাত্র একটি ঘোষণা সম্পর্কে কিছুই বলে না।
এই সীমাবদ্ধতা এমনকি এমন পরিস্থিতিতে বিরক্তিকর হয় যেখানে শর্তে কেবলমাত্র একটি ঘোষণার প্রয়োজন হয়। এই বিবেচনা.
bool a = false, b = true;
if(bool x = a || b)
{
}
যদি আমি 'যদি' -র সাথে স্কোপটি x সেট করে লিখতে চাই তবে ডিক্লোরেশনের ক্ষেত্রে প্রথম বন্ধনী প্রয়োজন (যেহেতু অ্যাসাইনমেন্ট অপারেটরটি লজিক্যাল ওআরের চেয়ে কম অগ্রাধিকার পেয়েছে), তবে যেহেতু প্রথম বন্ধনী ব্যবহার করা যায় না এটি এক্স এর বাইরে ঘোষণার প্রয়োজন দেহ, প্রত্যাশার চেয়ে বৃহত্তর পরিসরে এই ঘোষণাকে ফাঁস করে দেয় স্পষ্টতই এই উদাহরণটি তুচ্ছ তবে আরও বাস্তবসম্মত ঘটনাটি হ'ল যেখানে a এবং b ফাংশন যেখানে মানগুলি প্রত্যাবর্তন করা দরকার
সুতরাং আমি কি স্ট্যান্ডার্ডের সাথে অ-সঙ্গতিপূর্ণ করতে চাই, বা আমার সংকলকটি কেবল আমার বলগুলিকে আবদ্ধ করছে (VS2008)?
while
যেমন রয়েছে তেমন if
।
if (int a = foo(), int b = bar(), a && b)
? যদি কমা অপারেটরটি ওভারলোড না করা হয়, মানটি বলে যে এক্সপ্রেশনগুলি বাম থেকে ডানদিকে মূল্যায়ন করা হয় এবং ফলাফলটির মানটিই সর্বশেষ প্রকাশ। এটি for
লুপ ইনিশিয়ালাইজেশন সহ কাজ করে , কেন এখানে নয়?
if
কাজ করে তা থেকে প্রস্তাবিত হয়েছিল এবং এটি ভুল অনুমান বলে মনে হচ্ছে।
if
।if
এটি একটি লুপ নয়, এটি শর্তসাপেক্ষ।