const转化的疑问?
class A
{
public:
void Do() const
{
std::cout<<"const"<<std::endl;
}
void Do()
{
std::cout<<"noconst"<<std::endl;
}
public:
std::string m_str;
};
A a;
(static_cast<const A>(a)).Do();
const_cast Operator
C++ Specific
const_cast < type-id > ( expression )
The const_cast operator can be used to remove the const, volatile, and __unaligned attribute(s) from a class.
END C++ Specific
class A
{
public:
void Do() const
{
std::cout<<"const"<<std::endl;
}
void Do()
{
std::cout<<"noconst"<<std::endl;
}
public:
//const
//std::string m_str;
int n = 0;
};
int main(int argc, char* argv[])
{
A a;
const A aa;
(static_cast<const A>(a)).Do(); //1) const A* this const
(static_cast<const A&>(a)).Do(); //2) const A* this const
(const_cast<const A&>(a)).Do(); //3) const A* this const
(const_cast< A& >(aa)).Do(); //4) A* this const
aa.Do(); //5 const A* this const
a.Do(); //6 A* this const
}
class A
{
public:
void Do() const
{
std::cout<<"const"<<std::endl;
}
void Do()
{
std::cout<<"noconst"<<std::endl;
}
public:
//const
//std::string m_str;
int n = 0;
};
int main(int argc, char* argv[])
{
A a;
const A aa;
(static_cast<const A>(a)).Do();
(static_cast<const A&>(a)).Do();
(const_cast<const A&>(a)).Do();
(const_cast< A& >(aa)).Do();
aa.Do();
a.Do();
}
class A
{
public:
void Do() const
{
std::cout<<"const"<<std::endl;
}
void Do()
{
std::cout<<"noconst"<<std::endl;
}
public:
std::string m_str;
};
A a;
(static_cast<const A>(a)).Do();
输出的是noconst,也就算调用的是非const版本的Do;
(static_cast<const A>(a)).Do()该为(static_cast<const A&>(a)).Do()
或者A中去掉成员变量std::string m_str或者成员变量改为int m_n,
这种情况下输出的是const,调用的是const版本,求解?