在编译期实现两个字符串拼接

以最简单的数组的形式实现。

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即可。

 

posted @ 2025-05-03 12:45  大笨瓜  阅读(18)  评论(0)    收藏  举报