C++,当我不能使用 NULL/0 时检查变量是否被初始化

标签 c++ null

我需要检查变量是否已初始化。我是 C++ 的新手,所以也许我以错误的方式思考这个问题。我想执行以下操作:

if (variable) {
    // do some stuff
}

我的第一个想法是在声明时将值设置为 NULL。然而,事实证明 NULL 与 C++ 中的 0 相同。不幸的是,我的变量是一个可以为 0 的 double。我可以在网上找到的解决方案都是关于指针的,只是说使用 nullptr 但这当然在我的情况下是不可能的。

这里我有什么选择?

最佳答案

执行此操作的一般方法是使用 std::optional

https://en.cppreference.com/w/cpp/utility/optional

此数据类型包装内部类型并提供方法告诉您它是否已设置。

请注意,您需要一个 C++ 17 编译器。

这是一个例子。您可以看到它非常易于使用,并且您不需要创建标记值(即在未设置的情况下解释的特殊值)。

#include <iostream>
#include <cstdlib>
#include <optional>

using namespace std;

int main()
{
    optional<double> speed;
    if (!speed)
    {
        cout << "speed not set" << endl;
    }
    speed = 0;
    if (speed)
    {
        cout << "speed set to " << *speed << endl;
    }
}

关于C++,当我不能使用 NULL/0 时检查变量是否被初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58212026/

相关文章:

c++ - 如何实现仅 "same"类型之间的转换

c++ - 为双向链表实现 begin() 和 end()

c++ - static_cast 的奇怪用法

c# - 什么是NullReferenceException,如何解决?

sql - 如果不为null,则为唯一SQLAlchemy和Django

c++ - 初始化指针 vector (自动)

c++ - 为什么括号在函数指针声明中很重要?

c++ - 两个 4 位位域加起来不等于一个字节的大小 - 如何解决?

c++ - 初始化一个全局的 const POD 结构;针对特定成员

java - 如何确保 Java 类中的字段永远不会为空