c++ क्यों एक const वस्तु के सदस्य चर const नहीं हैं




सी++ प्रोग्राम्स (2)

बस एक ऐसे सवाल पूछा जो इस एक के लिए नीचे फोड़े।

#include <iostream>
using namespace std;

struct A {
    A() : a{1} {};
    int a;
};

template <typename Which>
struct WhichType;

int main() {
    const A a;
    const A& a_ref = a;
    const A* a_ptr = &a;
    WhichType<decltype(a.a)> which_obj; // template evaluates to int
    WhichType<decltype(a_ref.a)> which_ref; // template evaluates to int
    WhichType<decltype(a_ptr->a)> which_ptr; // template evaluates to int

    return 0;
}

क्यों टेम्पलेट const int बजाय const int नहीं हो?


decltype आपको decltype की "घोषित प्रकार" देता है जब यह कोष्ठक के एक अतिरिक्त सेट में संलग्न नहीं होता है

अभिव्यक्ति का वास्तविक प्रकार प्राप्त करने के लिए, वह है, const int , आपको लिखना decltype((aa)) लिखना होगा decltype((aa)) और इतने पर।

decltype हमेशा नामों के अलावा decltype अभिव्यक्ति के लिए एक संदर्भ प्रकार देता है


जब एक पहचानकर्ता (या सदस्य) का नाम पारित किया जाता है, तो यह घोषणा का प्रकार देता है।

जब एक अलग अभिव्यक्ति पारित की जाती है, तो यह आपके पास जो कुछ चाहिए, उसके करीब कुछ देता है, लेकिन संदर्भ-योग्य

WhichType<std::remove_reference_t<decltype((a_ptr->a))>> which_ptr; // template evaluates to const int!

जीना उदाहरण या यदि आप एल / आर नीच चाहते हैं:

WhichType<decltype((a_ptr->a))> which_ptr2; // template evaluates to const int&
WhichType<decltype(((const A){}.a))> which_ptr3; // template evaluates to const int

आप इसे "असली" रैवल्यू संदर्भ बनाने के लिए जोड़ सकते हैं।

WhichType<decltype(((A){}.a))&&> which_ptr4; // template evaluates to int&&!

जीना उदाहरण







decltype