避免仅在源文件中定义的类出现弱vtable警告

3

我知道一个类至少需要在源文件中定义一个虚函数(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警告。
严格来说,这个警告是正确的,因为虚表将在每个翻译单元中被包含。实际上,它毫无用处,因为无论如何虚表只在foo.o中被发出。

我如何仅针对源文件中定义的类禁用-Wweak-vtables警告?


1
它是否对本地命名空间中的类执行相同的操作? - bobah
2个回答

3
原来,独立的clang默认情况下已经做得很好了,只有Qt Creator中的clang代码模型显示了无用的警告。这已经被报告为QTCREATORBUG-19741,所以除了等待更新的Qt Creator版本之外,没有更多的事情要做了。

1

我不是很确定,但在我的工作中,我们有一些禁用本地化源代码警告的做法。

在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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接