#include <iostream>
class Exception : std::exception {
public:
const char* what() const noexcept override {
return "test";
}
};
int main() {
try {
throw Exception();
} catch (std::exception& e) {
std::cout << e.what() << std::endl;
}
}
在定义类
期间从基类继承时,继承的默认访问修饰符是private
。这意味着以下两个定义是等价的:
class derived : base { /* ... */ };
class derived : private base { /* ... */ };
该语言不允许1从私有基2引用派生类。作为示例,以下代码不编译:
int main()
{
derived d;
base& b = d; // <== compilation error
}
error: 'base' is an inaccessible base of 'derived'
base& b = d;
^
wandbox.org上的现场示例
这就是catch
块无法处理异常
的原因。将继承更改为public
...
class Exception : public std::exception
...你的原始代码就可以工作了。
wandbox.org上的现场示例
我的基本想法是从std::tuple派生我自己的类,以便在里面获得一些helper类型,如下所示: 现在我尝试使用如下代码: 线条 不能用GCC5.2.0编译,而是用GCC6.1.0编译。这有点神秘,因为我记得元组的构造函数确实是显式的。为什么这适用于GCC6.1.0?但这不是我寻找的问题:-) 另一个提示:我遇到问题的代码似乎是用Clang3.5.0编译的。
我感兴趣的是这是否是标准强制的,是否被某个编译器违反了。我的观察是: > Visual Studio 2015/2017(with/ehsc):throw()函数中的堆栈没有展开(不调用d-tors),但异常退出函数,并被try/catch捕获。没有调用STD::Terminate。 gcc(6.3.0)中,throw()函数中的堆栈被解除,但随后调用std::terminate(try/catc
我会期望std::reference_wrapper在将non-const转换为const方面可以作为参考,例如: 下面的代码在MSVC和GCC中编译并运行良好,但在Clang上则不行。我只是不明白为什么,它是UB,还是实际上是关于Clang编译器的问题? 仅在Clang上,显示以下错误: https://wandbox.org/permlink/FSY4tCvE9B17hbVn
错误:无法将类型为“std::_bit_reference&”的非常量lvalue引用绑定到类型为“std::vector::reference”{aka“std::_bit_reference”}的rvalue 因此,它抱怨,因为只有第二个参数是rvalue
问题内容: 我正在使用SWIG从Java访问C ++代码。 公开非常量引用传递的std :: string参数的最简单方法是什么? 我有参考暴露为Java数组传递原语,感谢typemaps.i,和s ^暴露,感谢std_string.i。但是非const std :: string&被公开为不透明指针类型。 当前: 期望的: 更新 :我找到 了 解决方案,如下所述。但是,它花费了超过几秒钟的时间。
我使用mysql C++connector和这段(稍微简化了一点)代码。 连接器应该抛出SQL::SqlException,它派生自std::Exception并具有一些附加方法,如。 抛出的异常在第二个块中捕获,但可以成功转换为(并用作)。 更奇怪的是,不同可执行文件中的类似代码会像预期的那样捕获。它们之间的区别在于,第一个是在一个共享对象(.so)中,该对象加载了。