相关疑难解决方法(0)

复制方法

从复制省略方法的标准定义:在C++计算机编程中,复制省略指的是一种编译器优化技术,它消除了不必要的对象复制.让我们考虑以下代码

#include <cstdlib>
#include <iostream>
using namespace std;
int n=0;
struct C 
{
 C (int) {}
 C(const C&) {++n;}      



       };
int main(int argc, char *argv[])
{
    C c1(42);
    C c2=42;




return n;
}
Run Code Online (Sandbox Code Playgroud)

这行"return n"将返回0或1,具体取决于副本是否被删除.

也考虑这段代码

#include <iostream>

struct C {
  C() {}
  C(const C&) { std::cout << "Hello World!\n"; }
};

void f() {
  C c;
  throw c; // copying the named object c into the exception object.
}          // It is unclear whether this copy may be elided. …
Run Code Online (Sandbox Code Playgroud)

c++ oop

5
推荐指数
1
解决办法
330
查看次数

未定义异常变量时按引用捕获

捕获异常时,标准指导是按值抛出,通过引用捕获.据我了解,这有两个原因:

  1. 如果由于内存不足异常而抛出异常,我们将不会调用可能会终止程序的复制构造函数.
  2. 如果异常是继承层次结构的一部分,我们可能会对异常进行对象切片.

如果我们有一个我们没有在catch块中定义异常名称的场景,那么这些问题(实际上是1.,因为如果我们没有变量的名称,切片不会成为问题)仍然有效吗?

例如:

catch(my_exception)
{ ... }
Run Code Online (Sandbox Code Playgroud)

要么

catch(my_exception &)
{ ... }
Run Code Online (Sandbox Code Playgroud)

如果在这种情况下由值捕获的异常,是否仍有可能终止程序?我的感觉是技术上仍然可行.

注意:我问这个是因为我必须审查某人的代码,在这种情况下按值放置.如问题中所示,我不完全确定任何一种选择的技术影响,但我认为就整体而言,最好在这种情况下通过引用而不管(在任何情况下都没有通过引用捕获的缺点) .

c++ exception

2
推荐指数
1
解决办法
3279
查看次数

标签 统计

c++ ×2

exception ×1

oop ×1