相关疑难解决方法(0)

在C++中通过指针捕获异常

我发现有三种方法可以捕获异常,有什么区别?

1)按价值捕获;

2)引用参考;

3)用指针抓住;

我只知道按值捕获将调用该对象的两个副本,通过引用捕获将调用一个.那么指针捕获怎么样?什么时候用指针捕捉?除了抛出一个对象,我可以抛出一个像这样的对象的指针吗?

class A {}

void f() {

  A *p = new A();
        throw p;


}
Run Code Online (Sandbox Code Playgroud)

c++ exception-handling try-catch throw

48
推荐指数
3
解决办法
2万
查看次数

非平凡变量的常量正确性

(尽管与无关,但仍受此答案的启发)

我一直被告知(并且一直在告诉)const,即使对于寿命很短的变量,保持- 正确性也是有价值和良好的做法,例如:

const std::string a = "Hello world";
Run Code Online (Sandbox Code Playgroud)

代替

std::string a = "Hello world";
Run Code Online (Sandbox Code Playgroud)

这个:

  • 表达意图更清晰。
  • 确保变量是不可变的,因此将其传递给可能会更改它的某些函数将使编译器对您大吼大叫。
  • 由于编译器的优化,可能会提高性能。

尽管自从现代C ++引入复制省略功能以来,标准中已有一些子句允许编译器调用move构造函数而不是复制构造函数:

在以下复制初始化上下文中,可以使用移动操作代替复制操作:

(3.1) 如果return语句([stmt.return])中的表达式是一个(可能带有括号的)id表达式,该对象使用在最里面的封闭函数或lambda的主体或参数声明子句中声明的具有自动存储期限的对象进行命名-表达式,或

3.2) 如果throw-expression[[expr.throw])的操作数是非易失性自动对象(函数或catch子句参数除外)的名称,其范围不会超出最内层封闭的结尾try-block(如果有一个),

这是否意味着使用const带有非默认复制/移动构造函数的对象实际上会产生性能损失,而不是在遇到这种省略的情况时会增加性能吗?

c++ copy-elision

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

标签 统计

c++ ×2

copy-elision ×1

exception-handling ×1

throw ×1

try-catch ×1