C++ 具有多个';使用std::foo';一行的语句?
根据这里的建议(),我避免使用C++ 具有多个';使用std::foo';一行的语句?,c++,c++11,C++,C++11,根据这里的建议(),我避免使用名称空间std。但是,基于C++入门的第3.1节中所说的,我一直在单独声明,如: using std::cout; using std::cin; using std::setw; using std::setprecision; 假设这被认为是一种可接受的做法,是否有一种简洁的方式在一行中说明所有这些?我知道我能做到: using std::cout; using std::cin; using std::setw; using std::setprecisio
名称空间std代码>。但是,基于C++入门的第3.1节中所说的,我一直在单独声明,如:
using std::cout;
using std::cin;
using std::setw;
using std::setprecision;
假设这被认为是一种可接受的做法,是否有一种简洁的方式在一行中说明所有这些?我知道我能做到:
using std::cout; using std::cin; using std::setw; using std::setprecision;
但这并不特别紧凑。本着定义变量时如何工作的精神,我尝试了以下方法:
using std::cout, std::cin, std::setw, std::setprecision;
但是我的编译器抛出了一个异常
如果我的假设是错误的(即,如果使用std::cout;
不是好的实践),那么这可能就是答案。我当然对此持开放态度,因为我不想鼓励或编写难闻的代码。不要与语言抗争,用它来工作
因此,您收到的建议是不完整的,永远不要通过将std
引入您当前所在的名称空间来污染它,即使是一点一点。这样做甚至会引入围绕过载解决方案的细微缺陷。辅导课只是为了让学生能从树上看到木头
至于效率,这一点是没有意义的,因为这对编写的编译程序没有任何影响,例如,std::cout
或cout
当然,C++确实为你提供了一种实现排版优雅的概念。毕竟,它可能是迄今为止最强大的语言。您可以构建一个可变宏来实现您想要的功能,在调用站点的使用将是make_优雅(cout、cin、setw、setprecision)
过载点的一个示例:
#include <iostream>
// see what happens if you put using namespace std; here.
template<typename T>
T max(T& a, T& b)
{
std::cout << "Next week's lottery numbers are";
return a > b ? a : b;
}
int main() {
const int a = 5;
const int b = 6;
max(a, b);
}
#包括
//看看如果使用名称空间std放置会发生什么;在这里
模板
T最大值(T&a、T&b)
{
标准::cout b?a:b;
}
int main(){
常数INTA=5;
常数int b=6;
max(a,b);
}
在这里,如果使用名称空间std编写,程序行为将发生重大变化代码>或使用std::max
因为std::max
比我构建的max
更适合参数。最好的方法:直接使用std::cout
。为什么不使用命名空间std
?@Jean BaptisteYunès:@Lilisten我会用隐式问题更新问题:这样做不好吗?@neuronet IMHO,这不坏,但不必要。一旦你习惯了显式地写它,:ST::CUT更自然,一个孤立的 Cuth 看起来很奇怪。谢谢这很有帮助,我最近从Python中提取了C++,知道有经验的开发者会认为什么是代码气味是非常有用的。现在我只是想知道如何改变我的标题,使它成为一个更好的问题。