我有一个以(公共)函数为特色的类返回一个向量(但它似乎无关紧要).
std::vector<int> test() {
return std::vector<int>(1,0);
}
Run Code Online (Sandbox Code Playgroud)
为什么我被允许称它为虚函数,
test();
Run Code Online (Sandbox Code Playgroud)
没有得到编译错误,或者至少有警告(Wall,pedantic)?
您可以丢弃返回值.一般来说这不是好的风格,但你总能做到.
这就是为什么我们不能在返回类型上重载的原因之一.因此,如果您定义了另一个函数void test(),则由于模糊性而无法进行调用.
如果您希望编译器警告您(非)故意丢弃返回值的情况,请传递标志-Wunused-result(对于GCC).[我不知道其他编译器的标志]
通常,几乎所有返回值都有意义,因此有些人使用此宏来检测他们无意中丢弃该值的情况,特别是如果返回值类似于错误代码,应该在之后进行检查.
如果要为特定函数启用警告,可以在签名末尾放置一个属性(对于GCC也是如此,对于MSVC,请查看此问题):
std::vector<int> __attribute__((warn_unused_result)) test() {
return std::vector<int>(1,0);
}
Run Code Online (Sandbox Code Playgroud)
另请参阅:如果忽略返回值,如何引发警告?
因此,如果您调用该函数但不使用返回值,则会收到警告.请注意,警告不会使编译失败,因此您需要添加-Werror到编译器标志.