gpt4 book ai didi

c++ - 定义不评估 POD?

转载 作者:行者123 更新时间:2023-11-30 03:10:24 25 4
gpt4 key购买 nike

我正在在线查看 C++ FAQ Lite。我再次浏览内联,因为我还没有找到它们的用途,并且想知道如何停止循环依赖,如 this 中所示。回答。我首先尝试做“为什么内联比定义更好”。使用以下代码的示例:

#define unsafe(i) \
( (i) >= 0 ? (i) : -(i) )

inline
int safe(int i)
{
return i >= 0 ? i : -(i);
}

int f();

int main(void)
{
int x(5);
int ans;

ans = unsafe(x++);
cout << ans << endl;
ans = unsafe(++x);
cout << ans << endl;

ans = safe(x++);
cout << ans << endl;
ans = safe(++x);
cout << ans << endl;

std::cin.get();
return 0;
}

编辑:

太棒了。打错字了。并不是因为我没有发现此类错误或其他任何东西而感到痛苦。

现在输出为 6, 9, 9, 11

然而,即使使用预递增,第一个值不应该是 7 吗?

如果这个宏被调用了两次,那么它不就是这样吗:

unsafe(x)//预增量在调用时不修改值。

unsafe(++x)//出于所有意图和目的,递增发生在第二次调用之前,因此++x。这是针对第一个 ans = unsafe(x++) 如果它被调用两次。

当我们到达第二个 ans = unsafe(++x) 时,x 不应该增加两次吗?一次是通过双调用,一次是在第一个双调用完成时?

最佳答案

代替:

#define unsafe(i) \
( (i) >= 0 = (i) : -(i) )

我想你想要:

#define unsafe(i) \
( (i) >= 0 ? (i) : -(i) )

响应您的编辑:

在第一次调用 unsafe(x++) 之后,x 是 7,即使 ans 是 6。这是因为你有声明:

ans = ( (x++) >= 0 ? (x++) : -(x++) )

ans 被分配给中间的 x++ after 最左边的 x++ 被评估。结果,ans == 6x == 7。与unsafe(++x)的区别在于,ans赋值给了++x,即结果为ans == x == 9

关于c++ - 定义不评估 POD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3228698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com