gpt4 book ai didi

c++ - 为什么我可以在 C++ 中将非 void 成员函数称为 void 成员函数?

转载 作者:太空宇宙 更新时间:2023-11-04 15:47:28 25 4
gpt4 key购买 nike

我有一个具有(公共(public))函数返回 vector 的类(但它似乎无关紧要)。

std::vector<int> test() {
return std::vector<int>(1,0);
}

为什么我可以像调用 void 函数一样调用它,

test();

没有得到编译错误,或者至少没有警告(Wall,迂腐)?

最佳答案

您可以丢弃返回值。这不是一般的好风格,但你总能做到。

这就是我们不能重载返回类型的原因之一。因此,如果您定义了另一个函数 void test(),由于歧义,调用将无法进行。

如果您希望编译器警告您(非)故意丢弃返回值的情况,请传递标志 -Wunused-result(对于 GCC)。 [我不知道其他编译器的标志]

一般来说,几乎所有的返回值都是有意义的,所以有些人使用这个宏来检测他们无意中丢弃值的情况,特别是如果返回值类似于错误代码,应该在事后检查。

如果你想为特定函数启用警告,你可以在签名的末尾放置一个属性(对于 GCC,对于 MSVC,请查看 this question):

std::vector<int> __attribute__((warn_unused_result)) test() {
return std::vector<int>(1,0);
}

另请参阅:How to raise warning if return value is disregarded?

因此,如果您调用函数但不使用返回值,则会收到警告。请注意,警告不会使编译失败,为此您需要将 -Werror 添加到编译器标志。

关于c++ - 为什么我可以在 C++ 中将非 void 成员函数称为 void 成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14216173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com