C ++标准是否允许将析构函数声明为# Select samples from same class
same_match = tf.equal(match_ids, match_id)
same_class = tf.equal(class_ids, class_id)
positive = tf.logical_and(same_match, same_class)
negative = tf.logical_not(positive)
samples_pos = tf.boolean_mask(f_anchor, tf.squeeze(positive))
samples_neg = tf.boolean_mask(f_anchor, tf.squeeze(negative))
?像这样:
final
如果是这样,那是否会阻止派生类的声明:
class Derived: public Base
{
...
virtual ~Derived() final;
}
如果允许 ,编译器是否可能发出警告?声明析构函数是 class FurtherDerived: public Derived {// allowed?
}
一个可行的习惯用语,用于表明某个类不打算用作基类?
答案 0 :(得分:57)
可以将C ++析构函数声明为
final
吗?
是
如果是这样,那是否会阻止派生类的声明:
是的,因为派生类必须声明析构函数(由您明确地或由编译器隐式地),并且析构函数将覆盖声明为final
的函数,该函数是格式错误的。
如果某个B类中的虚函数
f
标有 virt-specifierfinal
,并且在从B派生的D类中标有函数D::f
覆盖B::f
,该程序格式不正确。
它的衍生本身是不正确的,不必使用它。
声明析构函数是最终的可行成语,用于指示某个类不打算用作基类?
实际上,您应该只标记班级final
。它更加明确。