Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
声明StringSS与流之间的差异;std::stringstream ss;在C++中? 我对C++比较陌生,我有一个简单的问题。假设我想要声明一个stringstream对象或任何其他对象。使用完全限定名std::stringstream和仅将对象声明为stringstream有什么区别吗?我在代码示例中看到了这两种方法 正如我所说,我对C++很陌生,所以我想澄清一下。谢谢_C++ - Fatal编程技术网

声明StringSS与流之间的差异;std::stringstream ss;在C++中? 我对C++比较陌生,我有一个简单的问题。假设我想要声明一个stringstream对象或任何其他对象。使用完全限定名std::stringstream和仅将对象声明为stringstream有什么区别吗?我在代码示例中看到了这两种方法 正如我所说,我对C++很陌生,所以我想澄清一下。谢谢

声明StringSS与流之间的差异;std::stringstream ss;在C++中? 我对C++比较陌生,我有一个简单的问题。假设我想要声明一个stringstream对象或任何其他对象。使用完全限定名std::stringstream和仅将对象声明为stringstream有什么区别吗?我在代码示例中看到了这两种方法 正如我所说,我对C++很陌生,所以我想澄清一下。谢谢,c++,C++,区别在于,除非你做了一些可恶的事情,比如使用名称空间std;前者将编译,而后者将不编译。区别在于,仅使用stringstream意味着您使用了名称空间std;或者使用std::stringstream。如果没有其中之一,没有完全限定名的代码将无法编译 使用命名空间STD通常被认为是一种错误的做法,因为它会删除所有来自C++命名空间的好处,即名称冲突。如果您使用using指令,尤其是STD,它有诸如list、iterator等类,那么您就有可能与自己的类发生名称冲突 在最好的情况下,这可能会导致奇

区别在于,除非你做了一些可恶的事情,比如使用名称空间std;前者将编译,而后者将不编译。

区别在于,仅使用stringstream意味着您使用了名称空间std;或者使用std::stringstream。如果没有其中之一,没有完全限定名的代码将无法编译

使用命名空间STD通常被认为是一种错误的做法,因为它会删除所有来自C++命名空间的好处,即名称冲突。如果您使用using指令,尤其是STD,它有诸如list、iterator等类,那么您就有可能与自己的类发生名称冲突

在最好的情况下,这可能会导致奇怪的编译时错误,或者在最坏的情况下,对调用的函数进行静默替换,从而产生难以跟踪的问题。

std::stringstream指的是标准库stringstream中的许多对象之一。如果我们将图书馆视为物理图书馆建筑,那么您的程序必须去获取使用它的stringstream书籍。这就是std::语法所做的,它向您的程序表明,它必须转到标准库才能获取位于::右侧的内容。这适用于许多库,例如boost::甚至std::tr1:::这样的子名称空间。请注意,从技术上讲,名称空间并不等于库,但我们将忽略这一点


现在,通过编写没有std::的简单stringstream,它意味着在某个地方使用名称空间std;已经写好了。使用前面的类比,使用名称空间std;基本上把所有这些图书馆的书都混合到你的程序中。你不需要再得到它们了,但是你的程序现在被它的每一本书弄得乱七八糟。当然,如果您使用多个库执行此操作,可能会导致问题,因为现在来自std::的一本书可能会与来自boost::的一本书混淆。

是的,stringstream ss;暗示使用名称空间std;或者使用std::stringstream只是稍微不那么可怕;指令。帮自己一个忙,只需使用std::stringstream ss;。对于stringstream,他们可能在某一点上使用了名称空间std。使用std::stringstream和stringstream的主要区别在于,在这种情况下,还有一种称为stringstream的东西不是来自std。在第二种情况下,编译器将给出一个错误,你今天刚刚教了我一个新单词。@RAF1940 Verbatim=@RAF1940:Long story,太长了,不适合评论,但足以说明创建名称空间是为了在名称之间创建一个划分,使用名称空间通过修改查找来打破该划分,并可能导致歧义和更难阅读的解释代码。using指令实现了它的承诺,但并不是每个人都知道这个承诺是什么。如果没有它,查找就足够复杂:@RAF1940-关于由于使用名称空间std;而导致的歧义而导致的编译时错误,有很多问题;。名称空间的主要目的是使其更容易避免歧义;使用名称空间std;实际上是说该死的鱼雷,全速前进@长颈鹿船长我发现冗长名称空间的可维护性方面更有价值。如果我遇到像boost::somelib::Omberseclass::OmberseIterator这样的东西,我至少可以沿着链查找文档,但如果我只是看到Omberseclass::OmberseIterator,我必须挖掘它。