我在类中有一个返回bool的方法。此bool表示呼叫是否成功。很多时候这种方法的用户都错过捕获bool
bool bar()
{
return true; //or false in some cases
}
bool result = bar(); //
bar();// Can we get a warning or compiler error here
这类似于Force function to return value and make compile error C# 但这里的答案不适用。
我正在使用gcc 4.4.7
答案 0 :(得分:3)
调用者可以自由地忽略该值,编译器将很乐意优化它。如果您希望以一种标准的方式对C ++和设计“强制”确认调用者失败,则抛出异常,因为未处理的异常将调用std::terminate
。
或者,设置一个内部值,禁止进一步操作,如std::ios
。
答案 1 :(得分:2)
语句可以是简单的表达式(赋值也是一个类型化的表达式) - 所以通常没有。
您可以将其实现为运行时功能:
template<typename ResultType>
class CheckReturn {
public:
CheckReturn(ResultType value) : m_value(value), m_checked(false) { }
~CheckReturn(void) { assert(m_checked); }
operator ResultType (void) { m_checked = true; return m_value; }
private:
ResultType m_value;
bool m_checked;
};
然后
CheckReturn<bool> foo() { return false; }
...
if(foo()) { } // ok
foo(); // assertion failure at runtime