2011-12-19 53 views

回答

4

因为没有为NULL参考:)

+0

其实可能有空引用! – Nawaz 2011-12-19 18:34:09

+1

该代码将被编译,但会导致未定义的行为:'int&i = *((int *)0);'。在(非常罕见的)情况下,'dyanmic_cast'导致未定义的行为是错误的,因为选择了无效类型作为转换的端点,所以它会抛出一个异常,这是一个定义良好的行为。 :-) – Omnifarious 2011-12-19 18:55:11

+0

是的,我在这里寻找更多的高层次原因,詹姆斯坎泽几乎总结了它,你不能初始化没有对象的引用来引用它。 – ScarletAmaranth 2011-12-19 18:56:56

3

其实有可能是空引用(或者更确切地说,参考空)没有这样的事,但它是不确定的行为(UB)。由于标准不会定义 UB,所以dynamic_cast抛出非常明确的异常。

+0

Im not following :)请解释:) – ScarletAmaranth 2011-12-19 18:36:29

+0

对NULL的引用应该是'int const&'类型,但我不认为这就是你的意思。但是,如果没有有效的对象来引用它,则无法初始化引用。 – 2011-12-19 18:41:15

+1

@JamesKanze:这就是我的意思。 – Nawaz 2011-12-19 18:42:31

相关问题