检查C++中的值定义

tun*_*nuz 6 c++ undef

我正在使用C++,我需要知道标量值(例如a double)是否"已定义".如果需要,我还需要能够"取消"它:

class Foo {
public:
    double get_bar();

private:
    double bar;
    void calculate_bar() {
        bar = something();
    }
};

double Foo::get_bar() {
    if ( undefined(bar) )
        calculate_bar();
    return bar;
}
Run Code Online (Sandbox Code Playgroud)

在C++中有可能吗?

谢谢

Las*_*lan 12

正如其他答案所说,C++没有这个概念.你可以轻松解决它.

你可以有一个未定义的值,你在构造函数中初始化bar,通常是-1.0或类似的东西.

如果您知道calculate_bar永远不会返回负值,则可以将未定义函数实现为检查<0.0.

一个更通用的解决方案是让bool说明是否定义了bar在构造函数中初始化为false,并且在第一次设置时将其更改为true.boost :: optional以优雅的模板方式执行此操作.

这就是你所拥有的代码示例.

class Foo {
public:
    double get_bar();
    Foo() : barDefined(false) {}
private:
    double bar;
    bool barDefined;
    void calculate_bar() {
        bar = something();
    }
};

double Foo::get_bar() {
    if ( barDefined == false ) {
        calculate_bar();
        barDefined = true;
    }
    return bar;
}
Run Code Online (Sandbox Code Playgroud)


gim*_*mpf 6

正如其他人所指出的,没有什么比"未定义"的状态更好.但你可能想看看boost.optional