据我所知,一个类类至少需要一个在源文件(out of line)中定义的虚函数,否则将需要将 vtable 插入到每个目标文件中。
我有以下情况:
//foo.cpp
struct Foo {
virtual int Bar() { return 1; }
virtual ~Foo() = default;
};
Qt Creator (4.5.2) 中的 clang 代码模型为 Foo 发出 -Wweak-table 警告。
严格来说警告是正确的,因为 vtable 将包含在每个翻译单元中。实际上,它毫无值(value),因为无论如何 vtable 都只会在 foo.o 中发出。
如何仅对源文件中定义的类禁用 -Wweak-vtables?
最佳答案
事实证明,standalone clang 默认情况下是正确的,只有 Qt creator 中的 clang 代码模型显示无用警告。它已被报告为 QTCREATORBUG-19741 ,所以除了等待更新的 Qt Creator 版本之外别无他法。
关于c++ - 避免对仅在源文件中定义的类发出弱虚表警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50463374/