电面被问到,没答出。于是。。。
比较少用到的
mutable
和
const
对应
class X
{
public:
bool GetFlag() const
{
m_accessCount++;
return m_flag;
}
private:
bool m_flag;
mutable int m_accessCount;
};
explicit
struct A
{
A(int) { }
A(int, int) { }
operator bool() const { return true; }
};
struct B
{
explicit B(int) { }
explicit B(int, int) { }
explicit operator bool() const { return true; }
};
int main()
{
A a1 = 1;
A a2(2);
A a3 {4, 5};
A a4 = {4, 5};
A a5 = (A)1;
if (a1) ;
bool na1 = a1;
bool na2 = static_cast<bool>(a1);
B b2(2);
B b3 {4, 5};
B b5 = (B)1;
if (b2) ;
bool nb2 = static_cast<bool>(b2);
}
typeid
class Base {
public:
virtual void vvfunc() {}
};
class Derived : public Base {};
using namespace std;
int main() {
Derived* pd = new Derived;
Base* pb = pd;
cout << typeid( pb ).name() << endl;
cout << typeid( *pb ).name() << endl;
cout << typeid( pd ).name() << endl;
cout << typeid( *pd ).name() << endl;
delete pd;
return 0;
}
typename
和template一起用,作用同class
template T>
class C1 : typename T::InnerType
{};
template T>
class C2 : AT::InnerType>...
四个cast
static_cast 和 dynamic_cast
dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。
在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。
const_cast
似乎可以把
非const
转为
const
,
const
转为
非const
不过只能对
指针
,
引用
操作
const int a=1;
int*b=const_cast<int*>(&a);
*b=2;
cout<
reinterpret_cast
没弄明白。。。
参考:
http://www.cnblogs.com/fanzhidongyzby/archive/2012/11/07/2759326.html
http://www.cnblogs.com/chio/archive/2007/07/18/822389.html