@ আর এর এই উত্তর। মার্টিনহো ফার্নান্দেস দেখান, নিরাপদ-বুলের আইডিয়মটি সি ++ 11-এ স্বেচ্ছায় অবচয় করা হয়েছে, কারণ এটি কোনও সাধারণ দ্বারা প্রতিস্থাপন করা যেতে পারে
explicit operator bool() const;
উত্তরের মান অনুসারে §4 [conv] p3
:
কোনও এক্সপ্রেশন ই স্পষ্টভাবে কোনও প্রকারে রূপান্তরিত হতে পারে
T
যদি এবং কেবলমাত্র ঘোষণাটিT t=e;
ভালভাবে তৈরি হয় তবে কিছু উদ্ভাবিত অস্থায়ী পরিবর্তনশীলt
(§8.5)। কিছু ভাষা নির্মাণের প্রয়োজন বোধ হয় যে একটি অভিব্যক্তি বুলিয়ান মানতে রূপান্তরিত হয়। এইe
জাতীয় প্রসঙ্গে উপস্থিত একটি অভিব্যক্তিটি প্রাসঙ্গিকভাবে রূপান্তরিত হয়bool
এবং বলা হয় কেবলমাত্র যদি ঘোষণাটিbool t(e);
ভালভাবে তৈরি হয় তবে কিছু উদ্ভাবিত অস্থায়ী পরিবর্তনশীল টি (.58.5) এর জন্য।
হাইলাইট করা অংশটি পরিষ্কারভাবে "আরহি স্পষ্ট কাস্ট" (মান হিসাবে "প্রাসঙ্গিক রূপান্তর" বলা হয়) @ আর হিসাবে দেখায়। মার্টিনহো রেখে দিলেন।
"নির্দিষ্ট ভাষা রচনাগুলি" যা "অন্তর্নিহিত সুস্পষ্ট কাস্ট" এর জন্য নিম্নলিখিত বলে মনে হয়:
if
,while
,for
(§6.4 [stmt.select] p4
)- বাইনারি লজিকাল অপারেটর
&&
এবং||
(§5.14 [expr.log.and/or] p1
উভয়ের জন্য) - লজিকাল নেগ্রেশন অপারেটর
!
(§5.3.1 [expr.unary.op] p9
) - শর্তসাপেক্ষ অপারেটর
?:
(§5.14 [expr.cond] p1
) static_assert
(§7 [dcl.dcl] p4
)noexcept
(§15.4 [except.spec] p2
)
শিরোনামে আমাদের ধারণা সঠিক? আমি আশা করি আমরা কোনও সম্ভাব্য ত্রুটিগুলি উপেক্ষা করিনি।
operator bool
। উদাহরণস্বরূপ, যদি আমার কাছে shared_ptr
p নামক কোনও সদস্য থাকে এবং এই পদ্ধতিটি operator bool() const { return p; }
থাকে:, এটি সংকলন করতে ব্যর্থ। এটা বোকা আইএমও।