सशर्त तर्क
std::conditional और if constexpr
सशर्त तर्क, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
प्रकार और शाखाएँ चुनना
प्रकार-लक्षण तर्क कोड को संकलन समय पर प्रकार और कोड-पथ चुनने देता है। इसके मुख्य उपकरण std::conditional और if constexpr हैं।
std::conditional
std::conditional_t<cond, A, B> का परिणाम cond true होने पर A और अन्यथा B होता है।
#include <iostream>
#include <type_traits>
int main() {
using T = std::conditional_t<true, int, double>;
std::cout << std::is_same_v<T, int> << "\n";
return 0;
}भंडारण प्रकार चुनना
एक सामान्य उपयोग यह है: बड़े मानों के लिए बड़ा प्रकार और अन्य स्थितियों में छोटा प्रकार चुनना।
#include <iostream>
#include <type_traits>
template <bool Big>
struct Storage {
using type = std::conditional_t<Big, long long, short>;
};
int main() {
Storage<true>::type a = 10;
std::cout << sizeof(a) << "\n";
return 0;
}if constexpr की मूल बातें
if constexpr (C++17) संकलन के समय चुनी न जाने वाली शाखा को हटा देता है। दिए गए प्रकार के लिए केवल चुनी गई शाखा का संकलित होना आवश्यक है।
#include <iostream>
#include <type_traits>
template <typename T>
void describe(T v) {
if constexpr (std::is_integral_v<T>)
std::cout << "integer: " << v << "\n";
else
std::cout << "other: " << v << "\n";
}
int main() {
describe(5);
describe(2.5);
return 0;
}if constexpr, रनटाइम if से बेहतर क्यों है
सामान्य if के साथ, प्रत्येक T के लिए दोनों शाखाओं का संकलित होना आवश्यक है। if constexpr के साथ अस्वीकार की गई शाखा का इंस्टैंशिएशन नहीं होता, इसलिए उसमें ऐसा प्रकार-विशिष्ट कोड हो सकता है जो अन्यथा अमान्य होता।
प्रकार-विशिष्ट संक्रियाएँ
साधारण if के साथ यह संभव नहीं है, क्योंकि .length() int के लिए संकलित नहीं होगा।
#include <iostream>
#include <string>
#include <type_traits>
template <typename T>
auto size_of(const T& v) {
if constexpr (std::is_same_v<T, std::string>)
return v.length();
else
return sizeof(v);
}
int main() {
std::cout << size_of(std::string("hi")) << "\n";
std::cout << size_of(42) << "\n";
return 0;
}ओवरलोड के लिए enable_if
if constexpr से पहले, std::enable_if ने SFINAE के माध्यम से ओवरलोड चुने। जब कोई शर्त असत्य होती है, तो यह किसी फ़ंक्शन को ओवरलोड चयन से हटा देता है।
#include <iostream>
#include <type_traits>
template <typename T, std::enable_if_t<std::is_integral_v<T>, int> = 0>
void only_int(T v) { std::cout << "int " << v << "\n"; }
int main() {
only_int(7);
return 0;
}शर्तों का संयोजन
आप संकलन-समय की शर्तों में &&, || और ! के साथ ट्रेट्स को सामान्य बूलियन मानों की तरह जोड़ सकते हैं।
#include <iostream>
#include <type_traits>
template <typename T>
void check() {
if constexpr (std::is_integral_v<T> && !std::is_same_v<T, bool>)
std::cout << "non-bool integer\n";
else
std::cout << "something else\n";
}
int main() {
check<int>();
check<bool>();
return 0;
}पुनरावर्ती संकलन-समय चयन
if constexpr संकलन-समय पर पुनरावर्तन को सक्षम करता है, जो ट्यूपल या पैरामीटर पैक के तत्वों को एक-एक करके संसाधित करने में उपयोगी है।
conjunction और disjunction
C++17 में ट्रेट्स की सूची पर शॉर्ट-सर्किटिंग तार्किक AND/OR के लिए std::conjunction और std::disjunction भी उपलब्ध हैं।
सही उपकरण चुनना
प्रकार चुनने के लिए conditional, कोड चुनने के लिए if constexpr, और ओवरलोड चयन नियंत्रित करने के लिए enable_if/कॉनसेप्ट्स का उपयोग करें। स्पष्टता के लिए आधुनिक कोड if constexpr और कॉन्सेप्ट्स को प्राथमिकता देता है।
त्वरित जाँच
if constexpr के मुख्य लाभ को याद करें।
पुनरावलोकन
आपने संकलन-समय की सशर्त लॉजिक सीखी।
conditional_t<c,A,B>एक प्रकार चुनता हैif constexprकोड चुनता है और दूसरी शाखा को हटा देता हैenable_ifSFINAE के माध्यम से ओवरलोड चयन नियंत्रित करता है- ट्रेट्स को तार्किक ऑपरेटरों के साथ जोड़ें
एआई शिक्षक के साथ C++ सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 51
- पाठ
- 203
अक्सर पूछे जाने वाले प्रश्न
क्या “सशर्त तर्क” पाठ निःशुल्क है?
हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “सशर्त तर्क” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“सशर्त तर्क” में मैं क्या सीखूँगा?
std::conditional और if constexpr आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“सशर्त तर्क” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।