Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
什么是离线虚拟方法,为什么它会影响链接时间?
LLVM 编码标准说
如果一个类在头文件中定义并且有一个 vtable(或者它有虚方法或者它派生自带有虚方法的类),那么它必须总是在类中至少有一个外联虚方法。没有这个,编译器会将 vtable 和 RTTI 复制到每个包含头文件的 .o 文件中,膨胀 .o 文件大小并增加链接时间。
编译器必须为具有虚拟方法的类发出一个 vtable。这包含指向这些方法的指针。如果所有虚拟方法都是内联的(在标头中定义),那么编译器不知道要在哪个翻译单元(.cpp 文件)中发出 vtable,因此它会在所有虚拟方法中发出一个副本,然后链接器开始处理用它。这会在目标文件中产生额外的工作和膨胀。另一方面,如果虚函数是离线定义的(在 .cpp 中),则 vtable 可以在那里发出,因此只会发出一个副本。这同样适用于 RTTI。
我有一个带有输入字段和保存按钮的 jsf 表单,如下面的代码所示。我想要实现的是,当单击保存按钮时,应使用正则表达式模式验证输入。如果验证失败,则不应显示保存确认对话框。否则会显示保存确认对话框,让用户选择是否保存。
在下面的代码中,尽管有条件 onclick="if(#{conditionOK}),但始终显示对话框。我不希望显示确认对