10

有没有办法在 C++ 中强制分配函数的返回值?即如果我有一个成员函数 foo

class myClass{
    ...
    public:
    T1 foo(T2 x){T1 y; /*something*/ return y;};
}

我可以在 main() 中调用

myClass obj;
T1 a = obj.foo(x);  //<--

我可以打个更简单的电话吗

myClass obj;
obj.foo(x);   //<--

(不存储返回值)以某种方式“非法”?

或者,我可以区分

T1 a = obj.foo(x);
obj.foo(x);

谢谢你的时间,对不起我的无知

4

4 回答 4

7

如果你使用 g++,你可以使用

T1 foo(T2 x) __attribute__ ((warn_unused_result));

但是,这将导致警告,而不是错误。但是您可能会使用一些 -Werror=* 标志将其变成错误。有关所有受支持的功能属性,请参见此处。

于 2012-10-02T15:17:31.827 回答
3

不,没有办法强制对返回的对象进行操作。

不,你无法区分

T1 a = obj.foo(x);
obj.foo(x);

在调用内部(至少不是以可移植的标准方式。您可以使用调用堆栈等来破解,但为什么要这样做)。

于 2012-10-02T15:02:28.723 回答
3

简单的答案是否定的;但是你可以“强迫它”:

返回没有任何引用时自动销毁的智能指针。在析构函数中抛出一些异常或进行 assert() 调用。为了在正确使用时防止崩溃,您可以在该类中使用一些变量,并在您确定不再需要对象时将其设置为 false,这将告诉析构函数不要抛出任何东西。

于 2012-10-02T15:08:09.913 回答
2

没有办法说,但是如果返回值被忽略,好的静态分析工具通常会显示警告。我使用的 MSVC2010 自带的当然可以。

于 2012-10-02T15:03:13.263 回答