今天早些时候我尝试编译类似的代码:
class example
{
public:
example(const char (&in_data)[6]);
};
example foo()
{
return "ABCDE";
}
在GCC上,它抱怨返回线上没有转换为示例。我能够使用代码(例如
)在其他地方初始化类型为example的对象example bar("ABCDE");
好的。所有这些在VS2010中编译时都能正常工作。
现在,我的问题是,这是否有效,或者这是一些visual studio编译器扩展?在我看来,由于非显式构造函数,应该工作...
我现在没有确切的错误消息,因为我不在工作,但这真的很困扰我。
答案 0 :(得分:1)
我看不出为什么隐式转换不起作用的原因。尝试使用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;
^
答案 1 :(得分:0)
您是否定义了示例类的构造函数,而不仅仅是声明它?如果您想使用隐式转换,构造函数很重要。