我对C ++还是很陌生,我使用std::cout
进行调试。
不过,我真的很希望能够仅使用cout
而不是整个std::cout
的东西。我知道我可以导入std
命名空间,但是我已经解释了这是一件坏事,因为可能会因此发生名称冲突。
反正有这样做吗?
我尝试过
std::ostream cout = std::cout;
但是我明白了
function "std::basic_ostream<_CharT, _Traits>::basic_ostream(const std::basic_ostream<_CharT, _Traits> &) [with _CharT=char, _Traits=std::char_traits<char>]" (declared at line 391 of "/usr/include/c++/5/ostream") cannot be referenced -- it is a deleted function
请提出建议。
答案 0 :(得分:14)
答案 1 :(得分:7)
您不能复制流(考虑一下,这根本没有意义),但是您可以获取对它们的引用:
std::ostream& my_cout = std::cout;
但是,我强烈建议您不要这样做。如果您在某些代码std::cout
中看到,则几乎可以百分百确定自己知道它是什么。另一方面,cout
本身对您来说应该已经可疑了,my_cout
确实可以是任何东西。我知道这很困难,但是习惯于键入std::
,从长远来看,它将为您提供比所需的时间更多的时间来键入这5个字母。
答案 2 :(得分:4)
您的方式将是:
auto& cout = std::cout;
但您可能只是做
using std::cout;
(与使用名称空间的限制类似:不在标头的名称空间范围内,理想情况下尽可能限制使用指令的范围)
答案 3 :(得分:2)
答案 4 :(得分:0)
一种方法是using-declaration,它仅引入std::cout
而不是std::
中的所有名称:
using std::cout;
您尝试的方式行不通-尝试将std::cout
复制到另一个对象-并且std::cout
是不可复制的。
替代方法是使用参考:
std::ostream& cout = std::cout;
现在,cout
指向std::cout
,而不是其副本。
第二种方法很有用,例如,如果您想编写一个函数而不决定是否将其输出到cout
,文件或其他内容中,则可以使用
void func(std::ostream& output) {
output << "works with cout, files, etc.";
}
答案 5 :(得分:0)
如果您要缩写-c:a aac
,则可能是您真正在寻找的是依赖项注入。
请记住,std::cout
是对std::cout
模型的引用。
我们可以使用它来使代码更可重用,更可测试并且更松散地耦合。
示例:
std::ostream