如何解释以下代码?

con*_*ong 3 c++

我有两个关于C++编程的问题.

1)int a[10] = new int*;此声明是否有效?

2) extern void test(int a,int b) throw(const char *, RangeErr);

test()做什么,throw(const char*,RangeErr)意味着抛出两个异常?什么是RangeErr?为什么extern?这个功能有什么作用?

Dre*_*all 5

1)无效.数组不是指针(尽管在某些上下文中它可以隐式转换为一个).相反,尝试:

int* a = new int[10];
Run Code Online (Sandbox Code Playgroud)

2)这是一个带有(现已弃用且不明智的)抛出规范的函数声明.extern是无关的和不必要的,但是表示"外部链接",这意味着可以从其他编译单元调用该函数.外部链接是未在匿名命名空间中定义或以其他方式声明为"静态"的函数的缺省值.

throw规范指示此函数可以抛出两种不同类型的异常(C样式字符串和可能在提供此函数的库中定义的RangeErr异常对象).如果函数尝试抛出任何其他类型的异常,则调用std :: unexpected(),默认情况下会终止该程序.也就是说,我所知道的编译器不仅仅是忽略了非空的抛出规范,而且我相信为C++ 11设计了一种不同的机制.