编译器标志,强制调用者捕获返回值并在C ++中进行编译错误或警告

时间:2015-07-08 10:55:27

标签: c++ gcc compiler-flags

我在类中有一个返回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

2 个答案:

答案 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