c++ - 下面的代码怎么解释?

标签 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 是什么?为什么是外部的?这个函数有什么作用?

最佳答案

1) 无效。数组不是指针(尽管在某些情况下它可以隐式转换为指针)。相反,请尝试:

int* a = new int[10];

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

throw 规范指出这个函数可以抛出两种不同类型的异常(一个 C 风格的字符串和一个 RangeErr 异常对象,它可能在提供这个函数的库中定义)。如果该函数试图抛出任何其他类型的异常,则调用 std::unexpected() ,这在默认情况下会终止程序。也就是说,据我所知,除了简单地忽略非空抛出规范之外,没有任何编译器能做更多的事情,而且我相信为 C++11 设计了一种不同的机制。

关于c++ - 下面的代码怎么解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5903673/

相关文章:

c++ - 通过 CreateProcessW 使用 "mkdir"创建的目录名称中的垃圾?

c++ - 任何调用 operator() 的 STL/boost 仿函数

c++ - 约束现有的 Boost.Spirit real_parser (使用策略)

c++ - Qt 在 .dll 中使用 .dll

c++ - 是否有一些使用 Object::* 的实际示例

c++ - 学习编写低级驱动程序 (Linux)。

c++ - 从派生类初始化列表调用基类构造函数的顺序

c++ - 在 linux 下的 c++ 程序中包含 amp.h 库

c++ - 是否可以通过 Windows 键(可能没有钩子(Hook))捕获 Windows 开始菜单弹出窗口?

c++ - C++ 类中的 Getline