warning: catching polymorphic type ‘class std::exception’ by value [-Wcatch-value=] catch (std::exception e) {
这个警告是因为我们以值捕获的方式(byvalue)捕获了一个多态类型(polymorphic type)的异常(例如std:exception)。在 C++中,多态类型(即具有虚函数的类)通常应该通过引用(最好是const引用)来捕获,以避免对象切片(slicing)问题,并确保正确的多态行为。
代码中写了类似:catch(std:exception e)
按值捕获而正确的做法应该是:catch(const std:exception&e)
,按 const引用捕获
编译器选项—Wcatch—value(被—Wall启用)会对此发出警告,并且有三个级别:—Wcatch—value=1:警告按值捕获多态类型(默认,相当于—Wcatch—value)—Wcatch—value=2:警告按值捕获所有类类型—Wcatch—value=3:警告所有没有通过引用捕获的类型因此,解决这个警告的方法就是将按值捕获改为按引用捕获。