gpt4 book ai didi

c++ - 在一行上有多个 'using std::foo' 语句的紧凑方法?

转载 作者:太空狗 更新时间:2023-10-29 22:56:08 25 4
gpt4 key购买 nike

根据此处的建议 (Why is "using namespace std" considered bad practice?),我正在避免using namespace std;。但是,根据 C++ Primer 第 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;

但是我的编译器抛出异常。

如果我的假设是错误的(即,如果 using std::cout; 不是好的做法),那么这可能就是答案。我当然对此持开放态度,因为我不想鼓励或编写臭代码..

最佳答案

不要与语言抗争,使用它。

并且你因此收到的建议是不完整的,不要永远通过将 std 带入其中来污染你当前所在的任何命名空间,即使是一点一点.这样做甚至会引入以重载解析为中心的细微错误。教程这样做只是为了让学生能够从树上看到木头。

至于效率,这一点没有实际意义,因为在编写时对编译后的程序没有任何影响,例如,std::coutcout

当然,C++ 确实为您提供了一种实现排版优雅概念的方法。毕竟,它可能是迄今为止开发的最强大的语言。您可以构建一个实现您想要的可变参数宏,并且在调用站点使用 make_elegant(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);
}

在这里,如果您编写 using namespace std;using std::max;,程序行为将发生显着变化,因为 std::max 比我构建的 max 更适合参数。

关于c++ - 在一行上有多个 'using std::foo' 语句的紧凑方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49054742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com