gpt4 book ai didi

c++ - 值传递异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:32 25 4
gpt4 key购买 nike

当我编写 try/catch block 时,我总是按值抛出对象并按引用捕获。我还应用派生类最多的类必须在前的规则。

今天我试图通过违反这条主要规则的 BY VALUE 来捕捉。下面的代码可以毫无问题地执行并打印 "A4"

问题:将什么类型的CCA 参数传递给执行的异常处理程序?抛出的原始对象是 CCB 按值传递给 CCA 对象:这是内存切片问题的示例还是某种损坏,即对象 CCA 不能完全信任?

问候

AFG

  class CCA{
int m_value;
public:
CCA( int value ) : m_value( value ){}
};

class CCB : public CCA{
public:
CCB( int value ): CCA( value ){}
};


main(){
try{
throw CCB(4);
}catch( CCA a ){
std::cout << " A:" << a.value() << std::endl;
// this is the catch clause that executes
}catch( CCB b ){
std::cout << " B:" << b.value() << std::endl;
}
}

最佳答案

这就是切片:基本复制构造函数无法区分派(dispatch)生类类型中真正相同类型的参数:

struct Base {
Base(Base const &); // must accept any derived class
};

关于c++ - 值传递异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8392866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com