今天早些时候,我尝试编译类似于以下代码:
class example
{
public:
example(const char (&in_data)[6]);
};
example foo()
{
return "ABCDE";
}
在GCC上,它抱怨返回线上没有转换为示例。我能够使用其他代码在其他地方初始化example类型的对象
example bar("ABCDE");
正好。当在VS2010中进行编译时,所有这些工作都很好。
现在,我的问题是,这应该有用吗,还是这是一些Visual Studio编译器扩展?在我看来,这应该由于非显式构造函数而起作用。
我现在没有确切的错误消息,因为我不在工作,但这确实让我感到困扰。
最佳答案
我看不到隐式转换不起作用的任何原因。尝试使用gcc,clang和EDG,只有gcc失败。我猜这是一个gcc错误。也就是说,gcc似乎很想在数组引用之外创建char const*
。这段代码
example f()
{
char const (&array)[6] = "abcde";
return array;
}
产生此错误:
implicit.cpp: In function ‘example f()’:
implicit.cpp:10:12: error: could not convert ‘(const char*)array’ from ‘const char*’ to ‘example’
return array;
^
关于c++ - 字符串文字的隐式转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13486530/