强制分配返回的对象

force returned object to be assigned

本文关键字:对象 返回 分配      更新时间:2023-10-16

没有办法,在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);

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

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

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

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

不,无法对返回的对象强制执行操作。

不,你无法区分

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

在呼叫内部(至少不是以便携式标准方式。你可以破解调用堆栈之类的,但你为什么要这样做)。

简单的答案是否定的;但是你可以"强制它":

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

没有办法判断,但如果忽略返回值,良好的静态分析工具通常会显示警告。 我使用的那个附带MSVC2010当然可以。