在编译期实现两个字符串拼接
以最简单的数组的形式实现。
template<size_t N> struct Arry { char arr[N]{}; }; template<size_t N, size_t M> constexpr auto strcat(const char(&arr1)[N], const char(&arr2)[M]) { Arry<N + M -1> arr; for (size_t i = 0; i < N; ++i) { arr.arr[i] = arr1[i]; } for (size_t i = N - 1; i < N + M - 1; ++i) { arr.arr[i] = arr2[i - (N - 1)]; } return arr; }
注意:常量字符串的长度是包含一个字符串‘/0'的,所以两个字符串转为一个数组要减去一个0,只保留结尾的一个0即可。