小编ief*_*rge的帖子

C++ 中是否允许三元运算符计算两个操作数?

在将一些 C 代码移植到 Windows 时,我在 MSVC++ 中发现了一个有趣的三元运算符行为。编译器似乎? :在以下示例中评估了两个分支:

#include <stdio.h>
struct S {
    int x;
};

int getNum() {
    printf("get num\n");
    return 4;
}

int main(int argc, char **argv) {
    struct S s = argc ? (struct S) { .x = getNum() } : (struct S) { .x = getNum() };
    printf("%d\n", s.x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

印刷:

get num
get num
4
Run Code Online (Sandbox Code Playgroud)

但是,GCC 和 ClanggetNum()仅评估一次。哪种行为是正确的或标准允许的?

c++ visual-studio visual-c++

6
推荐指数
1
解决办法
1426
查看次数

标签 统计

c++ ×1

visual-c++ ×1

visual-studio ×1