我想要创建一个宏,它可以比较两个字符串,并在不满足条件的情况下发出编译时错误。这可以看作是编译时断言。
我不知道我怎么能做到。
例如:
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因此,我想问题归结为能够在编译时比较这两个字符串。
发布于 2014-12-15 18:45:46
您可以使用C++11使用constexpr函数来完成此操作:
constexpr bool strings_equal(char const * a, char const * b) {
return *a == *b && (*a == '\0' || strings_equal(a + 1, b + 1));
}(见演示)
在C++11之前是不可能这样做的,但是需要注意的是,许多编译器将编译相同的字符串文本作为指向同一位置的指针。在这些编译器上,直接比较字符串就足够了,因为它们都将被计算为相等的指针。
发布于 2018-12-13 13:26:59
从C++17开始,视图是可用的。它支持比较箱:
#include <string_view>
constexpr bool strings_equal(char const * a, char const * b) {
return std::string_view(a)==b;
}
int main() {
static_assert(strings_equal("abc", "abc" ), "strings are equal");
static_assert(!strings_equal("abc", "abcd"), "strings are not equal");
return 0;
}发布于 2014-12-15 18:44:44
您可以使用constexpr函数。下面是C++14的方式:
constexpr bool equal( char const* lhs, char const* rhs )
{
while (*lhs || *rhs)
if (*lhs++ != *rhs++)
return false;
return true;
}演示。
https://stackoverflow.com/questions/27490858
复制相似问题