在C ++中,如何在我们可能期望字符串或整数的上下文中处理NULL值?
通常,上下文是在从数据库检索数据时,例如,使用LEFT JOIN,其中某些列中的某些不存在的值将由NuLL值而不是预期的字符串或整数表示。
C ++中强大的强制转换使得这种场景比使用PHP更难处理。
在PHP中,我们可以使用===运算符轻松地使用if / else开关:
if ($value === NULL) {
// No data.
} else {
// We have some valid data.
}
C ++中的等价物会是什么样的?
我搜索过,找不到与C ++相关的问题。
这个问题一般有效。在我的特定情况下,我使用的是dbixx SQL library。
答案 0 :(得分:4)
boost::optional
是一种自然的方式,可以用强类型检查来表示c ++中的类型(必须检查null为null)
答案 1 :(得分:3)
来自http://art-blog.no-ip.info/wikipp/en/page/ref_dbixx_row:
函数
cols()
返回的数字 行中的列。isnull()
返回 如果特定字段为空,则使用它 列号(从1开始)或 列名称;
bool operator[]
只是语法isnull()
的糖。
在您的问题中,您声明您使用的是dbixx,因此我已将其链接到其文档中。这将始终特定于您正在使用的库。
答案 2 :(得分:1)
对于字符串指针(和一般的对象指针),它很容易,它们可以保持0表示它们是空的。
对于整数,你必须依赖一个外部变量来说明返回的对象是否为null。或者,如果将其作为指针传递,则可以使用上面的0指针。
答案 3 :(得分:1)
这听起来像是一般概念,但C ++没有一般的答案。语言本身没有真正的通用“NULL”值,可以与所有类型一起使用,以区别于已设置为实际值。
因此,任何情况下的答案完全取决于库或您正在使用的任何内容以及它是如何设计用于指示“NULL”值的。用于访问数据的函数的返回值可能指示数据是否为NULL或其他。或者可能有类似单独的IsNull()函数。或者图书馆可能会使用其他一些不同的方案。有很多种可能性。
唯一可能的一般答案是:阅读图书馆的文档,了解它们如何具体处理它。