2

今天早些时候,我尝试编译类似于:

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

example foo()
{
    return "ABCDE";
}

在 GCC 上,它抱怨在返回线上没有转换为示例。我能够使用代码在其他地方初始化示例类型的对象,例如

example bar("ABCDE");

正好。在 VS2010 中编译时,所有这些都可以正常工作。

现在,我的问题是,这应该有效,还是这是一些 Visual Studio 编译器扩展?在我看来,由于非显式构造函数,这应该可以工作......

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

4

2 回答 2

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;
            ^
于 2012-11-21T05:07:59.870 回答
0

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

于 2012-11-21T05:03:28.577 回答