Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 判断int是否在C++;?_C++_C++11 - Fatal编程技术网

C++ 判断int是否在C++;?

C++ 判断int是否在C++;?,c++,c++11,C++,C++11,我通常想判断是否分配了int 示例代码如下: int a; // some pre-codes... if (a is not assgined) ... not assigned operation else ... assigned operation // I tried to do that with code below: if (a == NULL) ... not assigned operation else ... assigned operation 问题是,如果在预编码

我通常想判断是否分配了
int

示例代码如下:

int a;
// some pre-codes...
if (a is not assgined) ... not assigned operation
else ... assigned operation

// I tried to do that with code below:
if (a == NULL) ... not assigned operation
else ... assigned operation
问题是,如果在预编码中分配了
a
0
,则仍然执行未分配的操作

目前,我必须设置
bool
的额外
assigned_标志
,以检查
a
是否已分配


还有更优雅的方法吗?

a
是一个
int
,只能存储整数。您可能需要一个额外的变量来跟踪它是否被显式赋值,需要保留一个您永远不允许有效赋值的前哨值(例如
INT\u MAX
INT\u MIN
),或者需要将
INT
包装在一个对象中(例如
std::optional
)它可以跟踪您(通过在内部维护一个额外的标志)。

a
是一个
int
,只能存储整数。您可能需要一个额外的变量来跟踪它是否被显式赋值,需要保留一个您永远不允许有效赋值的前哨值(例如
INT\u MAX
INT\u MIN
),或者需要将
INT
包装在一个对象中(例如
std::optional
)它可以跟踪您(通过在内部维护一个额外的标志)。

该语言不提供哨兵值来指示是否已将
int
分配给

你可以选择这样做。例如,如果您非常确定变量在正常执行时不会被指定这样的值,那么可以使用INT_MAX作为哨兵值

如果您可以选择使用C++17,则可以使用

您可以使用
std::pair
作为
std::optional
的穷人版本,但需要了解的是,当pair的
第二个
未赋值时,pair的
第一个
将初始化为
false
。在将值分配给该对的
第二个
时,您必须将
第一个
更改为
,并且永远不要将其更改回原来的值

std::pair <bool, int> a{false};

// some pre-codes...
if (a.first == false )
{
    ... not assigned operation
}

else
{
    ... assigned operation
}
std::对a{false};
//一些预编码。。。
如果(a.first==false)
{
…未分配操作
}
其他的
{
…分配的操作
}

该语言不提供哨兵值来指示是否已将
int
分配给

你可以选择这样做。例如,如果您非常确定变量在正常执行时不会被指定这样的值,那么可以使用INT_MAX作为哨兵值

如果您可以选择使用C++17,则可以使用

您可以使用
std::pair
作为
std::optional
的穷人版本,但需要了解的是,当pair的
第二个
未赋值时,pair的
第一个
将初始化为
false
。在将值分配给该对的
第二个
时,您必须将
第一个
更改为
,并且永远不要将其更改回原来的值

std::pair <bool, int> a{false};

// some pre-codes...
if (a.first == false )
{
    ... not assigned operation
}

else
{
    ... assigned operation
}
std::对a{false};
//一些预编码。。。
如果(a.first==false)
{
…未分配操作
}
其他的
{
…分配的操作
}

没有检查
int
变量是否已初始化或赋值的内置函数。在使用变量之前,您有责任跟踪并初始化变量。编译器可能会也可能不会警告您此类可能性。

没有内置函数检查
int
变量是否已初始化或赋值。在使用变量之前,您有责任跟踪并初始化变量。编译器可能会也可能不会警告您此类可能性。

不要在不知道变量是否有值的情况下编写代码。尽可能在第一次使用时声明变量。初始化它们。如果你真的需要,我建议你这样做。如果你不初始化它,它有一个“空”状态,你可以检查它。非常肯定,这是一个错误。你最终想要完成什么?你能展示突出显示的真实代码吗?为什么你认为这是必要的?不要在不知道变量是否有值的地方编写代码。尽可能在第一次使用时声明变量。初始化它们。如果你真的需要,我建议你这样做。如果你不初始化它,它有一个“空”状态,你可以检查它。非常肯定,这是一个错误。你最终想要完成什么?你能展示突出显示的真实代码吗?为什么你认为这是必要的?
std::pair
是一个很好的解决方案,如果你没有访问真实的
可选的
。但是我建议将
int
放在第一位,将
bool
放在第二位,以便与标准库保持一致(例如参见
std::map::insert()如果您无法访问真正的
可选
,则
std::pair
是一个很好的解决方案。但我建议将
int
放在第一位,将
bool
放在第二位,以便与标准库保持一致(例如,请参见
std::map::insert()
)。