c++ - C++,当我不能使用 NULL/0 时检查变量是否被初始化
问题描述
我需要检查变量是否已初始化。我是 C++ 的新手,所以也许我以错误的方式思考这个问题。我想做以下事情:
if (variable) {
// do some stuff
}
我的第一个想法是在声明时将值设置为 NULL。然而,事实证明 NULL 与 C++ 中的 0 相同。不幸的是,我的变量是一个可以为 0 的双精度变量。我可以在网上找到的解决方案都是关于指针的,只是说要使用 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;
}
}
推荐阅读
- mediawiki - 代码的哪一部分检查用户是否在 Mediawiki 上登录?
- javascript - 查找数组中每个数字的第一次出现
- macos - 如何运行 xcrun altool?`附近的zsh解析错误)
- c++ - cmake:强制特定库的构建类型失败
- heroku - Invalid Heroku MFA 生成的代码无效
- powershell - Octopus:重定向标准错误使运行手册失败
- javascript - React:更新一个状态会重置另一个状态
- node.js - Postgres 和节点的挑战
- laravel - 有没有办法阻止 Laravel 从路由中的参数名称中删除结尾的“s”?
- javascript - 使用 AWS 开发工具包从 Amazon S3 下载文件后如何删除文件