【发布时间】:2016-10-13 10:57:17
【问题描述】:
在通过 boost cpp 库书测试示例时,我注意到更改存储在 boost::any 变量中的类型可能会导致非法访问而不是异常:
好:
boost::any a = 1;
bool *p = boost::any_cast<bool>(&a); // ok, bad cast exception
不好:
boost::any a = std::string { "Boost" };
a = 1;
bool *p = boost::any_cast<bool>(&a); // no exception thrown
std::cout << std::boolalpha << *p << '\n'; // illegal access
因此,我的问题是:这看起来是一个错误,还是我不知道的与模板使用相关的一些潜在事实?
【问题讨论】:
-
“医生,当我这样移动我的手臂时很痛。” ......“好吧,不要那样移动你的手臂。”
-
v=boost::any a = 1; bool *p = boost::any_cast<bool>(&a); // ok, bad cast exception什么?不,这不会发生。 -
谢谢,你是对的,正如 Ami Tavory 指出的那样,我正在查看错误的代码部分。然而,由于他的解释是合理的,我已经更新了问题中的代码。
-
@AlexC 我建议保留问题原样,以避免混淆。
-
@SauravSahu - 完成,希望这实际上不会将焦点从代码中的真正问题转移,这是 Ami 指出的
标签: c++ boost shared-ptr