gpt4 book ai didi

c++ - 在编写 EMPTY_OR 宏时需要一些帮助

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

我正在尝试编写一个名为 EMPTY_OR 的宏,它将返回第一个参数,但如果它为空,它将返回第二个。

这是我目前所拥有的:

#include <iostream>

#define EMPTY_OR(x, y) ( (sizeof(#x) > sizeof("")) ? (x) : (y) )

#define TEST(x, y) EMPTY_OR(y, x)

using namespace std;

int main()
{
int four = TEST(4, );
int eight = TEST(4, 8);
cout << "four: " << four << endl;
cout << "eight: " << eight << endl;
return 0;
}

它很接近,但它不起作用,因为 main 函数的第一行扩展为以下内容:

( (sizeof("") > sizeof("")) ? () : (4) )

条件永远不会为真,因此永远不会评估 ()。我不应该关心它,但编译器关心它,并且它显示错误。

我怎样才能用最直接和符合标准(或至少符合 MSVC)的方式解决它?

最佳答案

如果我理解您要正确执行的操作,我会删除 sizeof 并只检查字符串中的第一个字符是否为 \0;

#define EMPTY_OR(x, y) ( #x[0] ? (x+0) : (y) )

关于c++ - 在编写 EMPTY_OR 宏时需要一些帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23043371/

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