在C++中通常被认为是良好的编码风格,您使用标准库中的类型?例如,如果我有一个using namespace std;
指令,你仍然希望看到类型完全合格的库类型:std::string
或者只是string
用作类型标识符是可以接受的吗?
如果你完全符合资格,你能否理解其背后的理由?
sde*_*sse 14
完全符合头文件.导入.cpp文件中的命名空间.
保持全局命名空间不被简单的#include混乱
Ark*_*nez 13
我更喜欢使用:
using std::string;
string whatever;
Run Code Online (Sandbox Code Playgroud)
而不是完全带来命名空间.
在任何情况下,库开发人员都应该避免使用与标准类型冲突的类型名称,尽管string
可能很常见.
对于标准以外的库我喜欢在嵌套命名空间不太长的情况下进行限定,如果它只是将其定义为包含库名称或类似名称的有意义的名称.
重点应该是避免混淆并生成清晰的代码.在某些情况下,省略名称空间可能会混淆函数或类的来源,但添加始终完整的名称空间可能会变得无法忍受.
using namespace
在头文件中using namespace
在"明显"库中使用源代码(例如std
,或在测试程序中测试的库)例
namespace fs = boost::filesystem;
bool fileExists = fs::exists(fs::path(filePath));
Run Code Online (Sandbox Code Playgroud)
编辑,为了完整性:
using namespace
在头文件中以非显而易见的方式污染具有导入的名称空间的源文件('nuf解释此已经存在于此线程中).
就其价值而言,您可以通过使用 using 指令拉取名称空间来做一些事情,而通过限定名称则无法做到这一点。规范示例可能是编写通用排序函数。如果swap
已为正在排序的类型定义了a ,您想使用它,但如果它没有swap
自己的 a,您想使用std::swap
.
为此,您可以编写如下代码:
using namespace std;
// ...
template <class T>
void my_sort(std::vector<T> &x) {
// ...
if (x[j] < x[k])
swap(x[j], x[k]);
Run Code Online (Sandbox Code Playgroud)
你也可以更有选择性:
template <class T>
void my_sort(std::vector<T> &x) {
using std::swap;
if (x[j] < x[k])
swap(x[j], x[k]);
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,如果swap
正在排序的任何类型的命名空间中有 a ,它将通过参数相关查找找到。如果没有,std::swap
将会找到,因为您已使用 using 指令/using 声明使其可见。在任何情况下,使用完全限定的名称都不会实现通常被认为是最理想的行为。
归档时间: |
|
查看次数: |
1635 次 |
最近记录: |