“std”一个命名空间。“::”运算符是“范围”运算符。它告诉编译器在哪个类/命名空间中查找标识符。
所以std::cout
告诉编译器你想要“cout”标识符,并且它在“std”命名空间中。
如果你刚才说cout
,那么它只会在全局命名空间中查找。由于 cout 没有在全局命名空间中定义,所以它无法找到它,并且会给你一个错误。告诉编译器“获取 std 命名空间中的所有内容并将其转储到全局命名空间中”。这允许您在没有 std:: 前缀的情况下使用,但它增加了名称冲突的可能性,因为您没想到的一堆额外名称也被添加到全局名称空间中,
using namespace std;
cout
C++ 标准库头文件
https://en.cppreference.com/w/cpp/header
引例:
#include<iostream> int main() { std::cout<<"我喜欢C++";//输出一句话 std::cout<<std::endl;//换行 return 0; }
1.std是什么?
std:: 是个名称空间标示符,C++标准库中的函数或者对象都是在命名空间std中定义的,所以我们要使用标准函数库中的函数或对象都要使用std来限定。
对象count是标准函数库所提供的对象,而标准库在名字空间中被指定为std,所以在使用cout的时候要加上std::。这样编译器就会明白我们调用的cout是名字空间std中的cout。
2.为什么将cout放到名字空间std中?
是因为像cout这样的对象在实际操作中或许会有好几个,比如说你自己也可能会不小心定义了一个对象叫cout,那么这两个cout对象就会产生冲突。
3.std都是什么时候使用?
一般来说,std都是要调用C++标准库时,要写上std;
使用非标准库文件iostream.h,不用写。
比如上面引例这样改写就不需要std:
#include<iostream.h> int main() { cout<<"我喜欢C++";//输出一句话 cout<<endl;//换行 return 0; }
当然还有一种方法:
在main函数的上面使用了两行语句:
using std::cout; using std::endl;
那么cout和endl前面就不需要std::
比如这样改写引例:
#include<iostream> using std::cout; using std::endl; int main() { cout<<"我喜欢C++";//输出一句话 cout<<endl;//换行 return 0; }
其实还有种更简便的方法,就是直接使用using namespace std来代替using std::cout和using std::endl。
using namespace std 告诉编辑器我们将要使用空间std中的函数或者对象。
所以cout和endl前面不用注明它们是std这个名字空间中的cout和endl。
#include<iostream> using namespace std; int main() { cout<<"我喜欢C++";//输出一句话 cout<<endl;//换行 return 0; }
C++ 字符串 – C++ 中的 std::string 示例
字符串是任何编程语言中必不可少的组成部分,C++ 也不例外。
无论您是想存储文本、操作文本还是接受键盘输入和输出,了解什么是字符串以及如何有效地使用它们都非常重要。
本文将教授您需要了解的有关在 C++ 中处理和使用字符串的所有知识。
什么是字符串?
字符串本质上是字符的集合。一些示例包括“Hello World”、“我的名字是 Jason”等。它们用双引号括起来"
。
在 C++ 中,我们有两种类型的字符串:
- C 风格的字符串
std::string
s(来自 C++ 标准字符串类)
您可以使用自己的小函数非常轻松地创建自己的字符串类,但这不是我们将在本文中讨论的内容。
C 风格的字符串
这些是从 C 编程语言派生的字符串,并且在 C++ 中继续得到支持。char
这些“字符集合”以空终止(\0
空字符)类型的数组的形式存储。
如何定义 C 风格的字符串:
char str[] = "c string";
这里,str
是一个char
长度数组9
(额外的字符来自\0
编译器添加的空字符)。
以下是在 C++ 中定义 C 风格字符串的其他一些方法:
char str[9] = "c string";
char str[] = {'c', ' ', 's', 't', 'r', 'i', 'n', 'g', '\0'};
char str[9] = {'c', ' ', 's', 't', 'r', 'i', 'n', 'g', '\0'};
如何将 C 风格的字符串传递给函数
#include <iostream>
int main() {
char str[] = "This is a C-style string";
display(str);
}
// C-style strings can be passed to functions as follows:
void display(char str[]) {
std::cout << str << "\n";
}
如何在 C++ 中使用 C 风格的字符串函数
C 标准库附带了几个方便的函数,您可以使用它们来操作字符串。虽然不广泛推荐使用它们(见下文),但您仍然可以通过包含<cstring>
标头在 C++ 代码中使用它们:
#include <cstring> // required
1. strcpy(s1,s2) --> Copies string s2 into string s1.
2. strcat(s1,s2) --> Concatenates string s2 onto the end of string s1
3. strlen(s1) --> Returns the length of string s1
4. strcmp(s1,s2) --> Returns 0 if s1==s2; less than 0 if s1<s2; greater than 0 if s1>s2
5. strchr(s1,ch) --> Returns a pointer to the first occurrence of character ch in string s1
6. strstr(s1,s2) --> Returns a pointer to the first string s2 in string s1
标准::字符串
C 风格的字符串相对不安全——如果字符串/字符数组不是以 null 结尾的,它可能会导致大量潜在的错误。
例如,一大堆其他缺点中的缓冲区溢出是C++ 开发人员社区不推荐使用 C 风格字符串的一些原因。
C++ 标准库提供的std::string
类是一个更安全的替代方案。以下是你如何使用它:
如何定义一个std::string
#include <iostream>
#include <string> // the C++ Standard String Class
int main() {
std::string str = "C++ String";
std::cout << str << "\n"; // prints `C++ String`"
}
std::string
C 风格的字符串和s之间最明显的区别是字符串的长度。如果您需要 C 样式字符串的长度,则每次都需要使用如下strlen()
函数计算它:
#include <iostream>
#include <cstring> // required to use `strlen`
int main() {
char str[] = "hello world";
std::cout << strlen(str) << "\n";
}
如果您不将其存储在变量中并且在程序的多个部分中都需要它,您可以快速观察到此选项的成本。
另一方面,std::string
字符串已经具有内置的长度属性。要访问它,您可以使用以下.length()
属性:
#include <iostream>
#include <string> // required to use `std::string`
int main() {
std::string str = "freeCodeCamp";
std::cout << str.length() << "\n";
}
简单、整洁、简洁,但重要的是减少了计算量。
但是访问长度属性并不是使用std::string
s 的唯一好处。这里还有几个例子:
#include <iostream>
#include <string>
int main() {
std::string str = "freeCodeCamp";
// Inserting a single character into `str`
str.push_back('s');
std::cout << str << "\n"; // `str` is now `freeCodeCamps`
// Deleting the last character from `str`
str.pop_back();
std::cout << str << "\n"; // `str` is now `freeCodeCamp`
// Resizing a string
str.resize(13);
std::cout << str << "\n";
// Decreasing excess capacity of the string
str.shrink_to_fit()
std::cout << str << "\n";
}
如何传递std::string
一个函数
#include <iostream>
int main() {
std::string str = "This is a C-style string";
display(str);
}
// Passing `std::string`s are as you would normally pass a regular object
void display(std::string str) {
std::cout << str << "\n";
}
你什么时候会使用 C 风格的字符串 over std::string
?
到现在为止,您应该确信std::string
s 比 C 风格的字符串有很多优势(最显着的是自动内存管理)。但有时您想使用 C 风格的字符串来代替:
- 如果您有 C 背景,您可能会习惯使用 C 风格的字符串。
- A
std::string
,尽管有好处,但非常复杂。像其他语言一样,如果你不知道自己在做什么,它会很快变得非常复杂。另外,它使用了大量的内存,这对于您的程序而言可能并不理想。 - 如果您在运行时小心地管理程序的内存(通过在完成使用对象时释放对象的内存),考虑到它们的小和轻量级,使用 C 风格的字符串会带来性能优势。
总结
我希望这篇文章可以作为 C++ 中字符串的介绍。关于这个美妙的抽象还有很多东西要学习,我希望写更多的文章来深入研究更高级的字符串和 C++ 概念。