如何解释以下代码? 我有两个关于C++编程的问题。

如何解释以下代码? 我有两个关于C++编程的问题。,c++,C++,1) inta[10]=新的int*此语句有效吗 2) 外部无效测试(inta,intb)抛出(const char*,rangerr) test()做什么,throw(const char*,rangerr)意味着抛出两个异常?什么是Rangeer?为什么是外人?此函数的作用是什么?1)否。不能为空数组赋值 2) test()是函数的名称抛出(…)列出了它可以抛出的异常种类范围错误是某种类型外部表示该函数是外部定义的,并且可以在编译单元外部(即从其他文件)访问。1 2) 这意味着该函数只能抛出

1)
inta[10]=新的int*此语句有效吗

2)
外部无效测试(inta,intb)抛出(const char*,rangerr)

test()做什么,throw(const char*,rangerr)意味着抛出两个异常?什么是Rangeer?为什么是外人?此函数的作用是什么?

1)否。不能为空数组赋值

2)
test()
是函数的名称<代码>抛出(…)
列出了它可以抛出的异常种类<代码>范围错误
是某种类型<代码>外部表示该函数是外部定义的,并且可以在编译单元外部(即从其他文件)访问。

1

2) 这意味着该函数只能抛出类型为“const char*”和“RangeErr”的异常。至于RangeErr是什么,我想它应该在代码中的其他地方定义,很可能来自异常。Extern命令函数的代码是外部链接的(dll、so或其他),您必须检查该库的api文档以了解它的功能^^ 希望有帮助。

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

int* a = new int[10];
2) 这是一个函数声明,其中包含一个抛出规范(现在已弃用&建议不周)。extern是无关的和不必要的,但它表示“外部链接”,这意味着可以从其他编译单元调用该函数。外部链接是未在匿名命名空间中定义或以其他方式声明为“静态”的函数的默认链接

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

  • 否。阵列是自动分配的。可以使用指针代替数组,但不能使用数组代替指针

  • 由于您只发布了声明,而没有发布定义,因此无法判断此函数的作用。
    throw
    显示了它可以抛出哪些类型的异常,在本例中是C型字符串或
    RangeErr
    ,尽管一次只能抛出一个<代码>范围错误可能已经定义
    extern
    表示该函数在其他文件中定义

  • 函数的
    throw
    语法经过多年的实践经验证明是一个错误。根据情况和编译器的不同,
    throw()
    可能会有些有用,但异常规范通常会令人困惑,有时会阻止编译器优化。看到这个帖子从赫伯萨特,谁知道一两件事关于C++。