c – dynamic_cast混淆
我放弃了这个…
按照上述规定,以下代码应形成良好. struct A{}; struct B : A{}; int main(){ B b; A a,&ar1 = b; B& rb1 = dynamic_cast<B&>(ar1); // Does not $5.2.7/2 apply here? B& rb2 = dynamic_cast<B&>(a); // and also here? } 但它不是.所有编译器都抱怨操作数到dynamic_cast不符合多态
所以我的问题是$5.2.7 / 2是什么意思?为什么$5.2.7 / 6踢在这里? 解决方法
“否则”在这种情况下是指“除非适用5.2.7 / 5中的条件”.
您可以告诉这一点,因为/ 2对于关于dynamic_cast的操作数的程序要求(注意“v应该是一个左值”的“应该”语言与“是”的语言“结果是一个左值” ).与标准中的其他地方一样,表达要求并不一定意味着这是唯一的要求.其他条款可以规定额外要求.在这种情况下,/ 6表示一个额外的要求,只适用于某些情况,取决于T和v的静态类型. / 3,/ 4,/ 5告诉你结果的价值,它们完全符合/ 2中的要求.没有人以“否则”开头.所以对我来说,很明显,他们不会从/ 2开始形成一个“else if”链. 一些方括号或某些东西可能会更清楚(即/ / 6中的“否”适用于/ 5中的“if”,而不适用于/ 2,/ 3或/ 4中的“if”.但这不是房子的风格. 除了别的以外,/ 5中的“否定”在逻辑上不能有意义地适用于/ 2中的条件. / 1表示T必须是“指针或引用完整类类型,或cv void *”. / 2涵盖两种情况 – 指针类型和引用类型.那就是一切对/ 2没有“其他”(除非是说“否则,一致的编译器必须发出诊断”,而是隐含的) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |