gpt4 book ai didi

c++ - 参数列表中char[N]和char(&)[N]的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:00 27 4
gpt4 key购买 nike

以下代码无法编译:

template <int N>
void f(char[N]) {}

int main() {
char buf[10];
f(buf);
}

如果我将 char[N] 更改为 char (&)[N],它会起作用。那么它们之间有什么区别呢?

最佳答案

你已经被 C 的向后兼容性所困扰。当你声明一个像这样的函数时:

int f(char c[10]);

您声明了一个函数,其参数类型为 char *。编译器会为您衰减参数类型。问题是:

int f(char c[5]);

声明相同 函数。这就是 C 的工作方式,C++ 保留了它以实现兼容性。

int f(char (&c)[10]);

声明一个函数,其参数类型为“对 char 数组(长度 10)的引用”。 C 没有引用,因此无需保持向后兼容性。

int f(char (&c)[5]);

声明一个不同的函数 - 具有不同的参数类型。

关于c++ - 参数列表中char[N]和char(&)[N]的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36662282/

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