我一直在一堆不同的论坛上徘徊,我似乎每次都会看到这种情况.这是一个非常初学的问题.
我通常定义一个程序
#include<string>
using namespace std;
string x;
Run Code Online (Sandbox Code Playgroud)
我看到一堆代码示例将字符串定义为
std::string.
Run Code Online (Sandbox Code Playgroud)
这样做的目的是什么?是好的做法还是有一些功能?
Thi*_*ter 45
正如另一个答案所述,std::除非您导入整个std命名空间或std::string(见下文),否则必须使用.
在我看来,使用它更好,std::string而不是string明确表示它是一个std::string而不是其他一些字符串实现.
如果您只是想写string,我建议您使用using std::string;而不是using namespace std;仅将内容导入您实际需要的全局命名空间.
tem*_*def 13
全名string是std::string因为它位于namespace std所有C++标准库函数,类和对象所在的命名空间中.
在您的代码中,您已明确添加了该行using namespace std;,这使您可以使用标准命名空间中的任何内容而不使用std::前缀.因此,您可以std::string使用速记来引用(字符串类型的真实名称),string因为编译器知道要查找namespace std它.
它们之间没有功能差异string,std::string因为它们是相同的类型.这就是说,有次在那里你宁愿std::string过string.例如,在头文件中,放置行using namespace std;(或使用任何命名空间)通常不被认为是一个好主意,因为它可能导致包含该头的文件中的名称变得模糊.在此设置中,您将只#include <string>在标题中,然后用于std::string引用字符串类型.同样,如果在std::string其他string类型之间存在任何歧义,使用该名称std::string将消除歧义.
你是否包含这一行using namespace std;是一个有点争议的话题,许多程序员强烈反对或强烈反对它.我建议您使用您认为合适的任何内容,并确保采用在处理大型项目时使用的任何编码约定.
正如ssteinberg所说,这是一样的。但只是在语法上。
根据我的经验,使用全名更有用
std::string
Run Code Online (Sandbox Code Playgroud)
在您需要的任何地方,或添加明确的
using std::string;
Run Code Online (Sandbox Code Playgroud)
在源文件的开头。
这样做的好处是,你的源文件的依赖关系更容易被观察到。如果你添加一个
using namespace std;
Run Code Online (Sandbox Code Playgroud)
这意味着您的代码可能依赖于该命名空间中的任何内容。
| 归档时间: |
|
| 查看次数: |
58866 次 |
| 最近记录: |