C++中是否存在与SQL COALESCE等效的标准库函数?
C++中类似SQL COALESCE的标准库函数及相关提案
首先回顾背景:在SQL中,COALESCE(val_1, val_2, ... val_n)是一个可变参数函数,返回第一个非空参数;若所有参数均为空,则返回空。在C中,我们可以通过空指针、C17引入的std::optional,或是持有monostate类型的std::variant来表示可空值。
一、C++标准库是否存在对应函数?
截至C++23,标准库没有提供通用的可变参数函数,能直接接收多种可空类型并返回第一个非空对象。不过针对特定可空类型,有近似的替代方式:
- 针对空指针:可以自行实现简单的可变参数模板函数,遍历参数返回第一个非空指针;
- 针对
std::optional:C++23新增了std::optional::or_else成员函数,但它仅支持二元操作(即仅能在两个optional中取第一个非空值),若要处理多个参数,只能通过链式调用or_else来模拟,不够简洁。
二、相关提案情况
有不少提案围绕单子编程或可空值处理,尝试引入类似COALESCE的功能:
- P0798R8 "Monadic operations for std::optional":该提案为
std::optional添加了一系列单子操作,虽然没有直接引入可变参数的coalesce函数,但为后续的可空值操作扩展奠定了基础; - P2733R0 "std::coalesce":这是专门提议引入通用
std::coalesce函数的提案,目标是支持任意可空类型(包括std::optional、空指针、带monostate的std::variant等),接收可变参数并返回第一个非空值;目前该提案仍处于早期阶段,尚未纳入标准; - 部分针对
std::variant的提案涉及空状态处理,但同样没有直接提供多参数的coalesce功能。
内容的提问来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

