2016-07-26 64 views
-4

所以我刚开始自学C++,并且有两个有关Hello World练习的新手问题。关于“Hello World”的一些基本问题

#include <iostream> 
using namespace std;     [1] 

int main() 
{ 
    cout << "Hello, World" << endl;  [2] 
    return 0; 
} 

[1]这行代码是必需的吗?如果不是,为什么?它没有它的工作,但我发现了一个使用它的来源,并想知道为什么使用它。

[2]在我第一次尝试时,我忘了添加endl并且代码工作。当我去检查时,我意识到这是失踪,为什么仍然工作呢?

真正基本的问题,但我想很好地理解基础知识。

非常感谢提前。

+0

每个问题有一个问题。不是两个。线索的名字。问题#1在堆栈溢出已经很平常地发现了很多次。我建议坚持#2。 –

+3

_“It's without it”_不太可能.. –

+0

endl =终点线,例如。换行符。世界不会结束,因为一个程序在说出hello world后没有输出换行符。 –

回答

2

这行代码是必需的吗?如果不是,为什么?它没有它的工作,但我发现了一个使用它的来源,并想知道为什么使用它。

命名空间

首先你应该明白什么是命名空间是的。 这是一个参数参考: Namespace

实际上,命名空间就像一个容器。您可以保留不同的 符号的名称。这样,在非常大的项目中,可以定义两个具有相同名称的不同符号(例如两个函数)。

我试着给你一个小例子: 我可以定义两个不同的函数foo同名。它可能是因为我把它们放在两个不同的命名空间中。

namespace my_ns1 { 
    void foo(int a) { 
    return a; 
    } 
} 

namespace my_ns2 { 
    void foo(int a) { 
    return a + 2; 
    } 
} 

当我想打电话给第一FOO功能正常invokation 将是:

my_ns1::foo(10); // return 10 

如果我要拨打的第二功能,则:

my_ns2::foo(10); // return 12 

在特定的块中,我可以指定始终使用名称空间的意图 与代码:

using namespace my_ns1; 

以这种方式有没有更需要指定“全名”的功能。

标准库将其所有函数保留在适当的名称空间中:std。 所以,当你想在标准库使用功能,您有什么样调用它:

std::function(...) 

如果使用代码

using namespace std; 

在你的文件的开头,你”只是说“打开”该名称空间 ,并且您可以调用所有没有std的函数::

命名空间是有用的,以防止名称冲突。


[2]在我第一次尝试我忘了补充ENDL和代码工作。当我去检查时,我意识到这是失踪,为什么仍然工作呢?

只需

std::endl 

是插入 '\ n' 字符,意思是 “线的端部” 的适当方式。

+3

'std :: endl'不仅会将'\ n'放入流中,还会刷新流。这是很多人似乎跳过的一个非常重要的通知。 –

+3

另外,你应该提到它[不鼓励使用'使用命名空间'](http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-in-c-considered-bad-practice) 。如果你真的想使用它,那么就像'使用std :: cin'一样使用它 –

+0

小修正:'endl'不仅仅是一个''\ n''。它是一个''\ n''和一条指令,用于“刷新”输出流,将其写入流表示的任何底层媒体。这种冲洗可能会非常昂贵,所以除非必须,否则不要这样做。您通常想要对流进行的操作是写入数据,允许其填充缓冲空间,并且只有当缓冲区已满时,或者您必须提交缓冲数据,才能写入数据。 – user4581301