gpt4 book ai didi

c++ - 为什么字符串作为指针或字符串作为原始数组总是在重载函数中作为指针调用?

转载 作者:行者123 更新时间:2023-12-04 14:05:56 25 4
gpt4 key购买 nike

我有一个函数 check_strconst char*const char(&)[N] 类型重载。

void check_str(const char*) {
std::cout << "string as pointer!!" << '\n';
}

template <size_t N>
void check_str(const char(&)[N]) {
std::cout << "string as array!!" << '\n';
}

然后,我将 arr_01 声明为 const char[]:

const char arr_01[] = "Desmond";

当我调用他们时:

check_str("Desmond");
check_str(arr_01);

第一次调用打印"string as pointer!!",而第二次调用仍然打印"string as pointer!!"

好吧,如果我使用 std::stringstd::string_view,它将失去对它们进行分类的意义。

有没有办法为 arr_01 调用参数类型为 const char(&)[N] 的重载函数,以便打印 "string as array!!" 没有指定非类型模板参数?

最佳答案

使用std::array:

#include <algorithm>
#include <array>
#include <cstddef>
#include <cstdio>

template <std::size_t sz>
[[nodiscard]] constexpr auto to_array(char const (&cstr)[sz]) noexcept {
std::array<char, sz> std_arr;
std::copy_n(cstr, sz, std_arr.data());
return std_arr;
}

void check_str(char const*) {
std::puts("string as pointer!!");
}

template <size_t N>
void check_str(std::array<char, N> const&) {
std::puts("string as array!!");
}

int main() {
auto constexpr arr = to_array("Desmond");
check_str("Desmond");
check_str(arr);
}

Demo

关于c++ - 为什么字符串作为指针或字符串作为原始数组总是在重载函数中作为指针调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68509933/

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