首页 > 解决方案 > 在下面的这种情况下,是否有任何理由从使用 const char* 更改为 string

问题描述

std::string我知道,与使用指针相比,总是建议使用它const char *,因为使用指针可能会发生无意的变化。但是对于不会被任何其他工程师无意更改的简单用法,这仍然是一个大问题。例如,请参见下面的代码 -

所以在下面这个例子中,我可以使用 std::string BothUserNameAndPassword = "abracadabra";

我有时不得不处理具有上述代码的代码审查。

#include<iostream>
using namespace std;
void authenticatePassword(std::string const & username, std::string 
const &password);
int main()
{
        const char* BothUserNameAndPassword = "abracadabra";        
        authenticatePassword(BothUserNameAndPassword, BothUserNameAndPassword);
}

void authenticatePassword(std::string const & username, std::string const &password)
{
        cout << "username = "<<username<<" and password = "<<password <<endl;
}

标签: c++string

解决方案


您的用户可能会在外部指定用户名和密码,这将在string. 所以没有理由不string从一开始就使用 a 。这个例子的双字符串创建工件可能不是真实世界或生产案例(至少我希望它不是……)。

在现代 C++(C++17 后)中,没有充分的理由再const char*在新代码中使用,您应该string_view改用。这有效地替换了指针,因为它具有字符串的大小,并且还可以有效地切片字符串的位。它不适合最终存储在字符串中的东西。在这种情况下,您应该string从一开始就使用 a。

所以有两种用例,一种适合string,一种适合string_view

  • 存储数据
  • 使用数据

在这种特定情况下,我会这样做:

int main()
{
    constexpr std::string_view BothUserNameAndPassword = "abracadabra";
    authenticatePassword(BothUserNameAndPassword, BothUserNameAndPassword);
}

void authenticatePassword(std::string_view username, std::string_view password)
{
        cout << "username = "<<username<<" and password = "<<password <<endl;
}

推荐阅读