C++ 如何在同一行内打印和返回?

C++ 如何在同一行内打印和返回?,c++,syntax,C++,Syntax,我知道这样的事情是可能的,我只是忘了如何正确地去做 if (true) printf("something"), return; return不是表达式,因此不能是逗号运算符的操作数 以下是一个(简单的)单行版本: if (true) { printf("something"); return; } (注意:一行的简洁性被高估了。写作是为了可读性,而不是简洁性,如果它们一致,则是双赢的。当然,我自己应该更多地听从我的建议……) 编辑:您可能正在考虑的是 if (true) retur

我知道这样的事情是可能的,我只是忘了如何正确地去做

if (true)
    printf("something"), return;

return
不是表达式,因此不能是逗号运算符的操作数

以下是一个(简单的)单行版本:

if (true) { printf("something"); return; }
(注意:一行的简洁性被高估了。写作是为了可读性,而不是简洁性,如果它们一致,则是双赢的。当然,我自己应该更多地听从我的建议……)

编辑:您可能正在考虑的是

if (true) return (void) printf("something"); // for void functions
if (true) return printf("something"), 0;     // for an e.g. int function

这是可行的,但丑陋和刻薄,因为它掩盖了返回的内容。我不赞成它们的使用。

如果返回类型是
std::list
,那么您需要返回
std::list
。您不能简单地什么都不返回,这正是您的代码所要做的

快速解决方法是:

if (true)
{
    printf("something");
    return {};
}
使用此选项将返回一个空的
std::list
。然后,无论调用什么函数,都必须检查空列表


在C++17中,我们有一个允许我们返回可选值的函数:它可以是值,也可以没有值

因此,您可以将函数签名更改为返回
std::optional
,如下所示:

std::optional<std::list<int>> getList()
{
    if (true)
        return {};

    ...
}

她的例子很小:

@Vojin…调用printf中的函数(返回)。例如:printf(“某物”,functioncall);函数的返回类型是什么?和(假设类型不是
void
)您打算返回什么值?返回类型是std::list@Peter很好的调用,我从没想过OP可能在一个非
void
函数中。事实上,您需要返回预期的类型。我曾想过类似的方法,但语法对我不起作用。
auto l = getList();
if (l.has_value())                 //or simply if (l)
{
    //Do something with l.value()  //or simply *l
}