我对C ++比较陌生,我有一个简单的问题。假设我想声明一个stringstream
对象或任何其他对象。使用完全限定名称std::stringstream
并将对象声明为stringstream
是否有任何区别?我已经看到它在代码示例中完成了两种方式。
正如我所说,我对C ++很陌生,所以我想要一些澄清。谢谢!
答案 0 :(得分:5)
不同之处在于,除非你做过像using namespace std;
这样可恶的事情,否则前者会编译而后者则不会。
答案 1 :(得分:2)
不同之处在于仅使用stringstream
表示您拥有using namespace std;
或using std::stringstream
。没有其中之一,没有完全限定名称的代码将无法编译。
using namespace std
通常被认为是一种不好的做法,因为它消除了从C ++命名空间中获得的所有好处 - 即名称冲突。如果您使用using
指令,特别是STD,它具有list
,iterator
等类,您可以打开与自己的类名称冲突的可能性。
在最好的情况下,这可能导致奇怪的编译时错误,或者在最坏的情况下,会调用您调用的函数的静默替换,并且难以跟踪问题。
答案 2 :(得分:0)
std::stringstream
是指标准库stringstream
中找到的众多对象之一。如果我们将图书馆视为物理图书馆建筑,那么您的程序必须去“获取书籍”stringstream
才能使用它。这就是std::
语法的作用,它向程序表明它必须转到标准库以获取::
右侧的任何内容。这适用于许多库,例如boost::
或甚至像std::tr1::
这样的子命名空间。 (请注意,技术上名称空间不等于库,但我们会忽略它)
现在,通过编写简单的stringstream
而不使用std::
,它意味着某处using namespace std;
已被写入。使用我们之前的类比,using namespace std;
基本上将所有这些图书馆书籍混合到您的程序中。你不再需要它们了,但是你的程序现在变得杂乱无章。当然,如果您使用多个库,这可能会导致问题,因为现在std::
的一本书可能会与boost::
的书混淆。