我有两个关于 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 是什么?为什么是外部的?这个函数有什么作用?
最佳答案
1) 无效。数组不是指针(尽管在某些情况下它可以隐式转换为指针)。相反,请尝试:
int* a = new int[10];
2) 这是一个带有(现已弃用且不明智的)抛出规范的函数声明。 extern 是无关的和不必要的,但表示“外部链接”,这意味着可以从其他编译单元调用该函数。外部链接是未在匿名命名空间中定义或以其他方式声明为“静态”的函数的默认值。
throw 规范指出这个函数可以抛出两种不同类型的异常(一个 C 风格的字符串和一个 RangeErr 异常对象,它可能在提供这个函数的库中定义)。如果该函数试图抛出任何其他类型的异常,则调用 std::unexpected() ,这在默认情况下会终止程序。也就是说,据我所知,除了简单地忽略非空抛出规范之外,没有任何编译器能做更多的事情,而且我相信为 C++11 设计了一种不同的机制。
关于c++ - 下面的代码怎么解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5903673/