强制返回要分配的对象

时间:2012-10-02 15:01:10

标签: c++

有没有办法在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 个答案:

答案 0 :(得分:7)

如果您使用的是g ++,则可以使用

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

这会导致警告,而不是错误。但你可能会使用一些-Werror = *标志将其变成一个错误。有关所有支持的函数属性,请参阅here

答案 1 :(得分:3)

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

不,你无法区分

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

在调用内部(至少不是以便携式,标准方式。你可以通过调用堆栈来解决这些问题,但为什么会这样做。)

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

没有办法说明,但是如果忽略返回值,优秀的静态分析工具通常会显示警告。我使用的那个随MSVC2010一起使用。