int main()
{
const int a = 1;
const int b = 2;
typedef decltype(a*b) multiply_type;
cout << typeid(multiply_type).name() << endl;
return 0;
}
Wartość zwracana przez program polega na tym, że multiply_type is int. Jestem całkiem zaskoczony. Spodziewałem się, że dedukcja typu da wartość const int, a ponieważ wyrażenie daje wartość pr, wynikowy typ byłby stały.Wyjaśnienie wyjściowych danych wyjściowych po pomnożeniu 2 stałych wartości stałych
PS: W przypadku auto wartość zwracana byłaby int, ponieważ opuszcza kwalifikator const.
Jakieś pomysły, dlaczego typ_wielolicy ma wartość int, a nie const int z decltype?
Edycja: Dodano przykład dodawania, który jest również powiązany z kwalifikatorem cv.
#include<iostream>
#include<typeinfo>
using namespace std;
struct Details
{
int m_age;
};
int main()
{
const Details* detail = new Details();
typedef decltype((detail->m_age)) age_type;
cout << typeid(age_type).name() << endl;
int a = 1;
age_type age = a;
age = 10; // This is not possible. Read only.
cout << typeid(age).name() << endl; // This returns the type as int though. Then why is 20 not possble ?
return 0;
}
Edytuj 2: Sprawdź nasz link. http://thbecker.net/articles/auto_and_decltype/section_07.html `
int x;
const int& crx = x;
/The type of (cx) is const int. Since (cx) is an lvalue,
// decltype adds a reference to that: cx_with_parens_type
// is const int&.
typedef decltype((cx)) cx_with_parens_type;`
Kategorie wartości i kwalifikatory cv są niezależne. W twoim konkretnym przypadku ma zastosowanie [wyrażenie]/6; nie ma żadnych wartości pradawnych typu "const" skalarnego. – Columbo
Zobacz moją edycję. Chciałem powiedzieć, że wyrażenie jest pr-wartością. – KodeWarrior
Nie mam pojęcia, jak to jest związane z moją odpowiedzią. – Columbo