据我所知,类类至少需要在源文件(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将包含在每个翻译单元中。实际上,它是没有价值的,因为无论如何,vtable只在foo.o中发出。
如何仅针对源文件中定义的类禁用-Wweak-vtables?
答案 0 :(得分:3)
事实证明,默认情况下,独立的clang做正确的事情,只有Qt创建者中的clang代码模型显示无用的警告。它已被报告为QTCREATORBUG-19741,因此除了等待更新的Qt创建者版本之外别无其他。
答案 1 :(得分:0)
不太确定,但在我工作的地方,我们有一些在本地化来源中禁用警告的做法。
在Windows下:
#pragma warning(push)
#pragma warning(disable : 4820)
//Rest of your includes (cstdio, vector...)
#pragma warning(pop) //For /Wall
在gcc之下:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
//Rest of your includes (cstdio, vector...)
#pragma GCC diagnostic pop