Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.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++ 如何将条件语句修饰为表达式?_C++_C - Fatal编程技术网

C++ 如何将条件语句修饰为表达式?

C++ 如何将条件语句修饰为表达式?,c++,c,C++,C,我想用条件语句作为一个表达式,比如下面,怎么做呢 0, (do {a++;} while (a > 100);); 编辑,我之所以要这样做,是因为我想向现有表达式添加条件语句以进行调试,现有表达式位于头文件中,并包含在许多源文件中。例如,当前一个表达式达到某个特殊值时,我想编写一些调试消息。在标准C++中表达式(在这里有一个GCC特定扩展名)时,您不能简单地使用< >同时使用语句。但你真正想要实现什么呢我们也许能找到一个优雅的选择 在C++0x中,您可以接近 #include <

我想用条件语句作为一个表达式,比如下面,怎么做呢

0, (do {a++;} while (a > 100););

编辑,我之所以要这样做,是因为我想向现有表达式添加条件语句以进行调试,现有表达式位于头文件中,并包含在许多源文件中。例如,当前一个表达式达到某个特殊值时,我想编写一些调试消息。

在标准C++中表达式(在这里有一个GCC特定扩展名)时,您不能简单地使用< <代码> >同时使用<代码>语句。但你真正想要实现什么呢我们也许能找到一个优雅的选择

在C++0x中,您可以接近

#include <iostream>

int main()
{
    int a = 10;
    std::cout << (([&]() -> int { do { a--; } while (a > 10); return a; })()) << '\n';
}
#包括
int main()
{
INTA=10;

St::CUTIN{{a-};}(a> 10);返回a;}())p>在标准C++中表达式( >语句时,不能有<代码> do(GCC特定扩展)。但您真正想要达到什么?-我们可能找到一个优雅的替代品…

在C++0x中,您可以接近

#include <iostream>

int main()
{
    int a = 10;
    std::cout << (([&]() -> int { do { a--; } while (a > 10); return a; })()) << '\n';
}
#包括
int main()
{
INTA=10;
std::cout int{do{a--;}while(a>10);返回a;})()
我之所以要这样做,是因为我想在现有表达式中添加一条条件语句以进行调试,现有表达式位于头文件中,并包含在许多源文件中。例如,我想在上一个表达式达到某个特殊值时编写一些调试消息

使用函数。如果要在标题中定义函数,请将其标记为内联

我之所以要这样做,是因为我想在现有表达式中添加一条条件语句以进行调试,现有表达式位于头文件中,并包含在许多源文件中。例如,我想在上一个表达式达到某个特殊值时编写一些调试消息


使用函数。如果要在头中定义它,请将其标记为内联。

< P> >将其放在<代码>内联函数中。这适用于C++和C99。如果您有特殊的事情需要在调用方的位置进行评估,请将调用封装到一个宏中,该宏正好符合您需要的评价。

< P>将其放入<代码>中。>内联函数。它适用于C++和C99。如果你有特殊的事情要在调用方的地方进行评估,把调用打包成一个宏,它正好可以完成你需要的评估。

你能给出更多的解释吗?即使你能做到这一点,我也会因为做了它而伤害你。你觉得你的代码不够吗?困惑不解,仍然很容易被其他程序员阅读?或者你是在错误的观念下,将更多的指令塞进更少的代码行会让你的程序神奇地运行得更快吗?@Thomson:我正试图在你的编辑中遵循解释……你的头文件中有一个表达式?如
#define EXPR++x+2*y
或者,使用客户端代码ala
fn(EXPR)
?如果是这样,也许您可以通过调用函数来更改EXPR?@Tony,您是对的,将额外的表达式放在前一个表达式的末尾在某些情况下(例如您的)会产生一些副作用,在这种情况下,我可以将额外的exp放在上一个表达式的前面。谢谢你指出。你能给出更多的解释吗?即使你能这样做,我也会伤害你。你是否觉得你的代码不够模糊,仍然可以被其他程序员很容易地阅读?或者你是在错误的观念下,认为填鸭式的将指令转换为更少的代码行将使您的程序神奇地运行得更快?@Thomson:我正试图按照您的编辑中的解释进行操作……您的头文件中有一个表达式?如在
#define EXPR++x+2*y
或其他什么,客户端代码为ala
fn(EXPR)
?如果是这样,也许您可以通过调用函数来更改EXPR?@Tony,您是对的,将额外的表达式放在前一个表达式的末尾在某些情况下会有一些副作用(例如您的),在这种情况下,我可以将额外的exp放在前面的表达式前面。感谢您指出。当lambda的返回类型由多个返回语句组成时,您必须指定它的返回类型,否则返回类型无效。(N3225§5.1.2p4)@弗雷德:好的观点…奇怪的GCC 4.5.2没有抱怨:-/.修复了上面的问题…谢谢。当lambda包含多个返回语句时,必须指定lambda的返回类型,否则返回类型无效。(N3225§5.1.2p4)@弗雷德:好的观点…奇怪的GCC 4.5.2没有抱怨:-/.修复了上面的问题…谢谢。