第三节 · 摆脱单亲状态 · 多重继承与虚继承
// 旧方法:不安全
void* data = new int(42);
int* p = static_cast<int*>(data); // 必须记住类型
cout << *p << endl;
delete static_cast<int*>(data);
// 如果类型记错了,就是未定义行为
string* s = static_cast<string*>(data); // 危险!#include <any>
int main()
{
any a = 42;
cout << any_cast<int>(a) << endl; // 42
a = string("Hello");
cout << any_cast<string>(a) << endl; // Hello
a = 3.14;
cout << any_cast<double>(a) << endl; // 3.14
// 类型不匹配会抛出异常
try
{
cout << any_cast<int>(a) << endl;
}
catch (const bad_any_cast& e)
{
cout << "Bad cast: " << e.what() << endl;
}
return 0;
}习题
Last updated