C++20添加了一个名为std::default_initializable
的概念。 与std::is_default_constructile
相比,命名上的差异似乎太明显了,不是偶然的。
它们的规范措辞也不同(至少在cppreference上是这样),但是我不明白有效的区别是什么。
以下是cppreference文章的简短摘要:
std::is_default_constructile
要求tfoo();
格式良好,假设它不被解析为函数声明。 换句话说(如果我理解正确的话),T
需要是可销毁的,T()
需要格式良好。
另一方面,std::default_initializable
要求t foo;
,t()
和t{}
格式正确。
这两者之间有什么有效的区别吗?
据我所知,t{}
总是被解释为t()
(忽略了大多数令人烦恼的解析,这里不算),所以我不确定为什么要显式地提到它。 此外,t()
格式良好似乎意味着tfoo;
格式良好。
LWG第3338期
突出了is_default_constructile
特征与最初命名为default_constructile
的C++20概念之间的含义差异,如果LWG问题3151被接受:
讨论
[...] 在LEWG的讨论中已经明确指出,3149将改变概念,要求默认初始化有效,而不是is_default_constructile
特征要求的值初始化有效。 LEWG也认为,如果一个特性和概念的名称非常相似,但含义却略有不同,这会让人感到困惑[...]
并随后核准了从
即,将default_constructile
概念重命名为default_initializable
:
拟议决议:
[...] 将稳定名称“[Concept.DefaultConstructile]”更改为“[Concept.Default.Init]”,并将“ConceptDefault_Constructile
”重新标题为“ConceptDefault_Initializable
”。 用default_initializable
替换对名称default_constructile
的所有引用(共出现20次)。
我在下面的某个地方看到了代码片段。 由于前面提到的代码片段工作得很好,它表明std::cout是从std::ostream派生而来的。但我还找不到任何直接的参考资料。 根据文件,其中说[强调我的]: 全局对象std::cout和std::wcout控制输出到实现定义类型的流缓冲区(源自std::stream buf),与标准C输出流stdout相关联。 上面的引文表示,控制输出到派生自std::s
要检查向量是否为空,我可以使用或。我查看了cplike上的签名,但缺乏理解它们的知识。它们如何相互关联?一个实现调用另一个实现吗? 我知道其中一个来自容器库,另一个来自迭代器库,但仅此而已。
问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型
我知道了从< code>std::async返回的< code>future具有某种特殊共享状态的原因,通过这种状态,< code >等待返回的future发生在future的析构函数中。但是当我们使用< code>std::pakaged_task时,它的未来不会表现出同样的行为。要完成打包的任务,必须从< code>packaged_task显式调用< code>future对象上的< cod
并行开发挺复杂的,特别是在试图用好线程和锁的过程中。如果要用到条件变量或std-atomics(一种无锁开发方式),那就更复杂了。C++0x提供了future和promise来简化任务线程间的返回值操作;同时为启动任务线程提供了packaged_task以方便操作。其中的关键点是允许2个任务间使用无(显式)锁的方式进行值传递;标准库帮你高效的做好这些了。基本思路很简单:当一个任务需要向父线程(启动
标准库函数bind()和function()定义于头文件<functional>中(该头文件还包括许多其他函数对象),用于处理函数及函数参数。bind()接受一个函数(或者函数对象,或者任何你可以通过”(…)”符号调用的事物),生成一个其有某一个或多个函数参数被“绑定”或重新组织的函数对象。(译注:顾名思义,bind()函数的意义就像它的函数名一样,是用来绑定函数调用的某些参数的。)例如: int
我在理解条件变量及其在互斥体中的使用时遇到了一些困难,我希望社区能帮助我。请注意,我来自win32背景,因此与CRITICAL_SECTION、HANDLE、SetEvent、WaitForMultipleObject等一起使用。 这是我第一次尝试使用C++11标准库进行并发操作,它是在这里找到的一个程序示例的修改版本。 关于这个的几个问题。 我读过“任何要等待std::condition_var