【发布时间】:2019-08-22 10:59:06
【问题描述】:
标准类std::basic_string 没有接受std::string_view 类型对象作为其参数的“隐式”构造函数的原因是什么?
我希望这个程序能够编译。
#include <iostream>
#include <string>
#include <string_view>
struct A
{
void f( const char *s ) const
{
std::cout << "A::f( " << s << " )\n";
}
};
struct B
{
void f( const std::string &s ) const
{
std::cout << "B::f( " << s << " )\n";
}
};
template <typename... Bases>
struct C : Bases...
{
using Bases::f...;
};
int main()
{
C<A, B>().f( std::string_view( "Hello" ) );
// or
std::string_view s( "Hello" );
C<A,B>().f( s );
}
【问题讨论】:
-
@G.M.可悲的是,您的链接只显示了所有的构造函数。您是指底部的模板构造函数吗? (10 和 11)。他们可能会接受 string_view,而且确实会接受,但前提是您理解“convertable_to”涵盖“is”。
-
实际上,从字符串视图来看,字符串有一个构造函数:basic_string.h:650。它有一个简短的:“从 string_view 构造字符串”。所以我不认为,这是重复的
标签: c++ string constructor c++17 string-view