string_view 对比 const char* 性能

string_view Vs const char* performance

下面代码中 std::string_view 参数是否优于 const char* 参数?

void func( const std::string_view str )
{
    std::istringstream iss( str.data( ) ); // str is passed to the ctor of istringstream


    std::size_t pos { };
    int num { std::stoi( str.data( ), &pos, 10 ) }; // and here it's passed to std::stoi
}

int main()
{
    std::array<char, 20> buffer { };
    std::cin.getline( buffer.data( ), 20 );
    func( buffer.data( ) );
}

std::istringstream ctor 和 std::stoi 都需要一个 const std::string& 作为它们的参数。但是我使用 data() 成员函数向他们传递了一个 std::string_view 对象。这是不好的做法吗?我应该恢复到 const char* 吗?

But I pass them a std::string_view object using its data() member function. Is this bad practice

是的,这是一种不好的做法。这很糟糕,主要是因为字符串视图不一定指向以 null 结尾的字符串。如果没有,将 data() 传递给需要空终止的函数将导致未定义的行为。

其次,在某些情况下,事先知道字符串的长度会更有效率。长度是已知的,因为它存储在字符串视图中。当您仅将 data() 用作参数时,您并未向函数提供已知大小。

改用这个:std::istringstream iss(std::string{str});

Should I revert back to const char*?

在这种情况下,我认为没有充分的理由这样做。