我想创建一个可以比较2个字符串的宏,如果不满足条件则发出编译时错误.这可能是编译时断言.
我不知道怎么能这样做.
例如:
STATIC_COMPARE("THIS STRING","THIS STRING") -> would emit a compile time error
STATIC_COMPARE("THIS STRING","THIS OTHER STRING) -> wouldn't emit a compile time error.
宏会看起来像
#define STATIC_COMPARE(str1,str2) if (str1==str2) emit an error with a message
所以我想问题归结为能够在编译时比较2个字符串.
解决方法:
您可以使用constexpr函数使用C 11执行此操作:
constexpr bool strings_equal(char const * a, char const * b) {
return *a == *b && (*a == '\0' || strings_equal(a + 1, b + 1));
}
在C 11之前不可能这样做,但需要注意的是,许多编译器会将相等的字符串文字编译为指向同一位置的指针.在这些编译器上,直接比较字符串就足够了,因为它们都将被评估为相等的指针.
原文地址:https://codeday.me/bug/20190929/1830446.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。