在C++中std::string 和string有啥区别呀?

在 C++ 中,std::stringstring 实际上是同一个类型,只是它们的命名空间(namespace)不同。具体来说:(我说为啥在写代码的时候都有个using namespace std;语句我还以为是闹着玩.)

  • std::string 明确指定了 string 类型位于 std 命名空间中。

  • stringstd::string 的简写,但要使用它,你需要在代码中声明 using namespace std; 或者 using std::string;

1. 使用 std::string

这是最安全和最明确的方式,可以避免命名冲突。推荐在大型项目或库中使用这种方式。

#include <iostream>
#include <string>

int main() {
    std::string s = "Hello, World!";
    std::cout << s << std::endl;
    return 0;
}

2. 使用 using namespace std;

这种方式会将 std 命名空间中的所有名称都引入到当前作用域中。虽然代码看起来更简洁,但可能会导致命名冲突,特别是在大型项目中。

#include <iostream>
#include <string>

using namespace std;

int main() {
    string s = "Hello, World!";
    cout << s << endl;
    return 0;
}

命名冲突示例

假设你有一个自定义的 string 类型,同时又使用了 using namespace std;,这将导致命名冲突:

#include <iostream>
#include <string>

using namespace std;

class string {
public:
    string(const char* s) {
        // 自定义的字符串类
    }
};

int main() {
    string s = "Hello, World!";  // 编译错误:ambiguous
    return 0;
}

在这个示例中,编译器不知道 string 是指 std::string 还是自定义的 string 类,从而导致编译错误。

总结

  • 推荐使用 std::string:明确且安全,避免命名冲突。

  • 谨慎使用 using namespace std;:虽然代码更简洁,但可能导致命名冲突,特别是在大型项目中。

  • 使用 using std::string;:只引入需要的类型,避免命名冲突。

后面我又看见既然string是用std::string来的,那么有没有str::int函数?AI告诉我不存在str::int,因为C++中直接有int类型.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值