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

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/

10-15 04:54