关于C++中的std:cout

4

这段代码是否有错误:

#include <iostream>
using namespace std;

int main()
{
    std:cout << "hello" "\n";
}

GCC没有检测到错误,但std:cout似乎不是标准的。

3
为了澄清一下,你的问题是关于带有一个冒号的 std:cout,而不是关于没有 << 之间的 "hello" "\n",对吗? - Mr Lister
2
又一个很好的示例说明using namespace std;如何损害您的代码并混淆微不足道的错误。 - πάντα ῥεῖ
@MrLister,你可以这样做。它会自动连接字符串。 - Neil Kirk
@NeilKirk 我知道这一点,但是有些答案集中在代码的这部分,现在正在被人投票否决。 - Mr Lister
@πάνταῥεῖ 哼,任何语言结构如果被滥用都会使代码变得晦涩难懂。操作符重载是吧?如果你想抱怨这个程序,那就抱怨一下 OP 是如何设置使用 goto 的。我的意思是,为什么要引入一个标签呢? - Mr Lister
@MrLister 我认为原帖作者并没有有意在这里使用标签。 - Neil Kirk
3个回答

12

没有错误。我可以重写你的代码,使它更清晰:

#include <iostream>
using namespace std;

int main()
{
std:
    cout << "hello" "\n";
}
你创建了一个名为std的标签。 cout未经限定使用,这是可以的,因为在它上面有stdusing-directive。你可以通过将它们写在一起来连接字符串文字。这是完全格式正确的代码,它将打印出“hello”,然后换行。

之前使用的 std 标识符可以被重新用作标签吗? - Minimus Heximus
@user2029077 标签名称与其他名称完全独立。它们不是“重复使用”,而是独立使用。 - Barry

4
你正在定义一个标签std,然后调用cout。这是合法的,因为你使用了using namespace std;

1
代码存在问题。 在试图指示编译器使用命名空间std时,我们尝试调用在std范围内定义的函数cout。
因此,范围解析运算符的正确使用方式是:
    'std::cout '

"and not"(并非)
    std:cout.

其他人通过写作已经指出了。
    std:

你所做的是创建一个标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接