无法通过C ++中的引用捕获引发的异常

Ritobroto Ganguly
#include <iostream> 
using namespace std;

int main() {
  int a = 3;
  cout<<"Address of a = "<<&a<<endl;
  try{
    throw a;
  }catch(int& s){ 
    cout<<"Address of s = "<<&s<<endl;
  }
  return 0;
}

输出:

a的地址= 0x7ffeee1c9b38

s的地址= 0x7fbdc0405900

为什么a和s的地址不同?

maximum_prime_is_463035818

它们具有不同的地址,因为它们是不同的对象。来自cppreference关于throw

throw expression  

[...]

  1. 首先,从表达式复制初始化异常对象

[...]

通过引用进行捕获的原因并不是为了避免复制而是为了正确捕获从其他继承的异常。对于int没有关系。


出于好奇,这是a在catch块中获取引用的方法

#include <iostream> 

struct my_exception {
    int& x;
};

int main() {
    int a = 3;
    std::cout << "Address of a = " << &a << '\n';
    try {
        throw my_exception{a};
    } catch(my_exception& s) { 
        std::cout << "Address of s = " << &s.x << '\n';
    }
}

可能的输出:

Address of a = 0x7ffd76b7c2d4
Address of s = 0x7ffd76b7c2d4

PS:以防万一,您对我的代码做了更多更改,因为为什么“使用命名空间标准”;被认为是不良做法?“ std :: endl”和“ \ n”,因为在中return 0是多余的main

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法捕获PHP中引发的COM异常

来自分类Dev

C#-通过反射调用(SetValue())时,无法捕获在属性设置器中引发的异常

来自分类Dev

为什么Python无法捕获C ++中引发的异常?

来自分类Dev

线程的DefaultUncaughtExceptionHandler无法捕获AlertDialog onClick()方法中引发的异常

来自分类Dev

捕获C#中从Delphi DLL引发的异常

来自分类Dev

在 C# 中引发事件时出现空引用异常

来自分类Dev

无法捕获从其他函数引发的异常

来自分类Dev

观察者无法捕获动态扩展方法中引发的异常

来自分类Dev

通过引用捕获异常危险吗?

来自分类Dev

通过const引用捕获异常并丢弃const

来自分类Dev

我应该在哪里捕获构造函数中引发的C ++异常?

来自分类Dev

如何捕获在C函数调用的Haskell回调函数中引发的Haskell异常?

来自分类Dev

无法从c ++中的函数捕获异常

来自分类Dev

无法从c ++中的函数捕获异常

来自分类Dev

C ++:在引发/捕获异常时,异常对象何时被破坏?

来自分类Dev

C ++异常:按引用/值捕获

来自分类Dev

无法捕获C ++异常

来自分类Dev

PHP-无法捕获Google API库引发的异常

来自分类Dev

无法捕获由std :: thread构造函数引发的异常

来自分类Dev

PHP-无法捕获Google API库引发的异常

来自分类Dev

C#中通过继承捕获异常

来自分类Dev

捕获任务中引发的异常?

来自分类Dev

通过引用捕获C ++ Lambda

来自分类Dev

无法在 try-catch C# 中捕获异常

来自分类Dev

在构造函数C ++中引发异常

来自分类Dev

在Python中引发未处理的C异常

来自分类Dev

如何拦截C ++中ImageMagick引发的异常?

来自分类Dev

在构造函数C ++中引发异常

来自分类Dev

不能引发C ++中的自身异常

Related 相关文章

热门标签

归档