字符串文字的隐式转换

时间:2012-11-21 04:49:57

标签: c++ visual-studio-2010 gcc

今天早些时候我尝试编译类似的代码:

class example
{
public:
    example(const char (&in_data)[6]);
};

example foo()
{
    return "ABCDE";
}

在GCC上,它抱怨返回线上没有转换为示例。我能够使用代码(例如

)在其他地方初始化类型为example的对象
example bar("ABCDE");
好的。所有这些在VS2010中编译时都能正常工作。

现在,我的问题是,这是否有效,或者这是一些visual studio编译器扩展?在我看来,由于非显式构造函数,应该工作...

我现在没有确切的错误消息,因为我不在工作,但这真的很困扰我。

2 个答案:

答案 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)

您是否定义了示例类的构造函数,而不仅仅是声明它?如果您想使用隐式转换,构造函数很重要。