我有以下代码:
#include <string_view>
class Foo
{
public:
Foo(std::string_view) {}
};
当我这样做时,一切都可以正常编译(使用 clang v8,C++17):
Foo f("testing");
但是,如果我使用复制初始化它会失败:
Foo f = "testing";
诊断:
prog.cc:15:9: error: no viable conversion from 'const char [8]' to 'Foo'
Foo f = "testing";
^ ~~~~~~~~~
prog.cc:7:7: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'const char [8]' to 'const Foo &' for 1st argument
class Foo
^
prog.cc:7:7: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'const char [8]' to 'Foo &&' for 1st argument
class Foo
^
prog.cc:10:5: note: candidate constructor not viable: no known conversion from 'const char [8]' to 'std::string_view' (aka 'basic_string_view<char>') for 1st argument
Foo(std::string_view) {}
^
1 error generated.
查看 string_view的构造函数,我没有看到任何需要的重载,char const[]
这可能是问题吗?我意识到我可以用它"testing"sv
来解决这个问题,但我觉得字符串文字大小写也应该有效。
为什么复制初始化案例不起作用?如何使它与字符串文字一起使用?