我有一个类:
class Symbol_t {
public:
Symbol_t( const char* rawName ) {
memcpy( m_V, rawName, 6 * sizeof( char ) );
};
string_view strVw() const {
return string_view( m_V, 6 );
};
private:
char m_V[6];
}; // class Symbol_t
而且有一个我无法修改的库函数:
extern bool loadData( const string& strSymbol );
如果有一个局部变量:Symbol_t symbol( "123456" );
当我需要调用loadData时,我不敢像这样做:
loadData( string( symbol.strVw().begin(), symbol.strVw().end() ) );
我必须这样做:
string_view svwSym = symbol.strVw();
loadData( string( svw.begin(), svw.end() ) );
我的问题是:第一种方法正确吗?还是必须使用第二种方法?
因为我认为在第一种方法中,我传递给std::string构造函数的迭代器是两个不同的string_view对象,理论上结果是未定义的,尽管我们几乎可以在所有C++编译器中得到预期的结果。
任何提示将不胜感激!谢谢。
string_view
的主要目的就是避免这种情况。 - Roflcopter4std::string
是一种值类型,拥有字符串的内存。实例化std::string
需要进行完整复制,因为这正是使用该类型所要求的。 - Ad N