我在下面的某个地方看到了代码片段。
#include <iostream>
int main()
{
std::ostream& os = std::cout;
os << "thanks a lot" << std::endl;
return 0;
}
由于前面提到的代码片段工作得很好,它表明std::cout是从std::ostream派生而来的。但我还找不到任何直接的参考资料。
根据文件,其中说[强调我的]:
全局对象std::cout和std::wcout控制输出到实现定义类型的流缓冲区(源自std::stream buf),与标准C输出流stdout相关联。
上面的引文表示,控制输出到派生自std::streambuf的类型,而不是派生自std::streambuf的类型。
我只在一个名为usr/include/c/7/iostream的文件中找到了std::cout的声明:
extern ostream cout; /// Linked to standard output
我找不到std::cout的实现。
为了帮助这篇文章的读者,请参阅下面的代码片段
#include<iostream>
#include<typeinfo>
int main()
{
std::cout << typeid(std::cout).name() << std::endl;
std::cout << typeid(std::ostream).name() << std::endl;
return 0;
}
以下是输出:
So
So
输出表明它们是相同的类型。
由于上述代码片段运行良好,它表明std::c来自std::ostream。
不完全是。代码之所以有效,是因为std::c
是一个std::ostream
。无需继承即可阅读和理解该代码示例。
上面的引文表示,控制输出到派生自std::streambuf的类型,而不是派生自std::streambuf的类型。
引用是在谈论您不需要关心的细节(除非您确实关心它们;)。extern ostream cout的重要部分;这个问题的
是ostream cout;
这意味着cout
是ostream
类型的实例(extern
只是表示它只是一个声明,而定义(实例)在其他地方,何时在C中使用extern)。
ostream是一个类cout是该类的一个实例。
这与
class Person{}; Person john;
没有什么不同。Person
是类,john
是该类的实例。C标准库恰好提前创建了这个特定类(ostream
)的实例(cout
),配置为写入标准输出流。
该行
std::ostream
我想这样使用std::ostream: 有一个错误,说ostream构造函数受到保护: 错误:'std::basic_ostream 但我记得
std::cout是std::ostream的一个实例。我可以在一个名为usr/include/c/7/iostream的文件中看到std::cout的声明: 而std::ostream由typedef std::basic\u ostream定义 此外,您似乎无法创建std::ostream的实例。请参阅此演示代码片段: 以下是编译器对上述代码段的抱怨: 问题来了,因为
要检查向量是否为空,我可以使用或。我查看了cplike上的签名,但缺乏理解它们的知识。它们如何相互关联?一个实现调用另一个实现吗? 我知道其中一个来自容器库,另一个来自迭代器库,但仅此而已。
我知道了从< code>std::async返回的< code>future具有某种特殊共享状态的原因,通过这种状态,< code >等待返回的future发生在future的析构函数中。但是当我们使用< code>std::pakaged_task时,它的未来不会表现出同样的行为。要完成打包的任务,必须从< code>packaged_task显式调用< code>future对象上的< cod
我创建了以下代码: 如果我没有像预期的那样在main.cpp中包含iostream头文件,则无法识别STD::Cout。我的问题是:如果不包括iostream,为什么在quote.h中使用std::oStream没有问题?。在前面提到的库中,将cout定义为ostream,为什么cout的使用是一个问题而ostream不是? 我使用VS2017,以防这些信息很重要。
并行开发挺复杂的,特别是在试图用好线程和锁的过程中。如果要用到条件变量或std-atomics(一种无锁开发方式),那就更复杂了。C++0x提供了future和promise来简化任务线程间的返回值操作;同时为启动任务线程提供了packaged_task以方便操作。其中的关键点是允许2个任务间使用无(显式)锁的方式进行值传递;标准库帮你高效的做好这些了。基本思路很简单:当一个任务需要向父线程(启动