gpt4 book ai didi

c++ - g++ 将返回的字符串文字视为 const char 指针而不是 const char 数组

转载 作者:IT老高 更新时间:2023-10-28 23:01:42 26 4
gpt4 key购买 nike

当从一个应该使用 g++(版本 4.7.3)执行隐式转换的函数返回字符串文字时,我看到了一些奇怪的行为。谁能解释为什么下面的代码:

#include <stdio.h>

class Test
{
public:
template <unsigned int N>
Test(const char (&foo)[N])
{
printf("Template const char array constructor\n");
}

Test(char* foo)
{
printf("char* constructor\n");
}
};

Test fn()
{
return "foo";
}

int main()
{
Test t("bar");
Test u = fn();

return 0;
}

产生结果:

Template const char array constructor
char* constructor

在 g++ 上?令人惊讶的是,在从 fn() 生成返回值时,优先选择 char* 构造函数而不是 const char 数组构造函数。诚然,有一个警告,“不推荐使用从字符串常量到 'char*' 的转换”

更令人惊讶的是,如果您删除 char* 构造函数,那么代码将无法使用 g++ 编译。

它在 clang 中按预期工作(两次都使用模板构造函数),这让我认为这是一个编译器错误,但也许它只是 C++ 规范的一个奇怪的角落 - 有人可以确认吗?

最佳答案

似乎这是一个影响多个 gcc 版本的错误,已被反复报告,最近一次是大约一个月前针对最新版本 4.8.2。见 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24666

关于c++ - g++ 将返回的字符串文字视为 const char 指针而不是 const char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22054382/

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