有没有一种方法可以引用cout,而无需使用名称空间std或以std :::为前缀?

时间:2018-08-07 08:50:34

标签: c++ cout

我对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

请提出建议。

6 个答案:

答案 0 :(得分:14)

好的,带有using declaration

using std::cout;

有关在头文件中不执行此操作并将其限制在较小范围内的常规健康警告。

答案 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)

对不起,评分太低,无法发表评论,但是为什么不输入

using std::cout;

位于文件顶部,然后仅使用cout。 附言也回答了this post

答案 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