I have been trying to figure out when and why the decltype() yeilds const but I don't get any in-depth details about it.
struct S
{
double d;
double& dr = d;
double* dPtr;
vector<double> vec;
};
const S cs;
decltype(cs.d) d; // yeilds double
decltype((cs.d)) dd; // yeilds const double&
decltype(*cs.dPtr) deRef; // yeilds double&
decltype(cs.dr) ref; // yeilds double&
decltype(cs.vec.begin()) it; // yeilds const_iterator
I thought every lvaule reference that decltype() yeilds will be const due to the const specifier before S but I was wrong. How does decltype() determine a type is const or nonconst when the expressions are member access?
It's really difficult for me to understand the difference between the result from decltype((cs.d)) and decltype(cs.dr) (also the decltype(*cs.dPtr)). And as we can see, iterator will be automatically converted to const_iterator. Are there any rules for decltype() with the const specifier?
Aucun commentaire:
Enregistrer un commentaire