
C++ semantic
文章平均质量分 76
C++
Linkkk丶
这个作者很懒,什么都没留下…
展开
-
Lambda Expressions
lambda创建函数对象。closurelambda和closureclass存在于编译期,closure存在于运行期。lambda通常被用于创建一个closure,仅用作函数的参数。然而,closure可能被普遍的拷贝,所以通常可能有多个closures具有相同的closuretype,对应于某个单独的lambda。c1,c2和c3都是lambda产生的closure的拷贝。...翻译 2022-07-28 19:31:23 · 311 阅读 · 0 评论 -
std::atomic
std::atomic<T>::storevoid store(T desired, std::memory_order order = std::memory_order_seq_cst) noexcept;void store(T desired, std::memory_order order = std::memory_order_seq_cst) volatile noexcept;使用 desired 原子的替换当前值。内存依据 order 的值被影响。volatile-q翻译 2022-06-01 15:34:03 · 278 阅读 · 0 评论 -
Item 40: Use std::atomic for concurrency, volatile for special memeory.
Item 40: Use std::atomic for concurrency, volatile for special memeory.虽然 volatile 与并行编程毫无关系(不像 Mutex 或者是 condition variable),但是在一些编程语言中(e.g. Java 和 C#),甚至在 C++ 中,它对并行编程是有帮助的,一些编译器赋予了 volatile 语义,使它能够应用于并行软件(但是仅限于使用这些编译器编译时)。C++ 程序员有时会将 C++ 特性 – std::ato翻译 2022-05-30 16:51:09 · 102 阅读 · 0 评论 -
std::thread
std::thread定义在头文件 <thread>。class thread; (since c++11)类 thread 表示 a single thread of execution。线程允许多个函数同时执行。当相关线程对象的构造完成,线程立刻执行(等待任何OS的调度延迟), 从作为构造函数参数提供的顶层函数开始。顶层函数的返回值被忽略,且如果函数以抛出异常的方式终止,std::terminate 会被调用。顶层函数可能通过 std::promise 或者通过修改共享变量(可能需要翻译 2021-11-23 20:06:41 · 433 阅读 · 0 评论 -
Attribute specifier sequence(since C++11)
Attribute specifier sequence(since C++11)介绍 types,objects, code 等 implementation-defined 的属性。[[attr]] [[attr1, attr2, attr3(args)]] [[namespace::attr(args)]] alignas_specifier通常,语法是:[[ attribute-list ]] (since C++11)[[ using attribute-namespace : att翻译 2021-11-12 15:43:13 · 237 阅读 · 0 评论 -
std::memory_order
Relaxed ordering标记为 memory_order_relaxed 的 Atomic 操作并非同步操作;对并行的内存访问并不强加顺序。仅保证原子性和修改顺序的一致性。例如,x 和 y 初始化为 0。原子操作非同步操作。这里的原子操作指的是读写内存的行为,非同步操作意味着,只是发出读写内存的指令,其具体操作将会在将来的某个时间点完成。改内存模式不强加操作完成的顺序,只保证原子性,和修改顺序的一致性。这里的原子性指的是多线程不同同时进行读写操作;修改顺序的一致性,其修改即为写操作,仅保证写翻译 2021-11-04 16:29:55 · 1254 阅读 · 0 评论 -
STD DEQUE
指导思想典型实现用单独分配的固定大小数组的序列。关于bufferinline size_t __deque_buf_size(size_t __size) { return __size < 512 ? size_t(512 / __size) : size_t(1);}固定大小(512字节)的buffer能容纳的最大目标类型数量。buffer即为典型实现用单独分配的固定大小数组。迭代器迭代器类型为随机访问迭代器,实现[n]、+ntemplate <class _T翻译 2021-07-05 19:13:34 · 983 阅读 · 0 评论 -
Item 5:Know what functions C++ silently writes and calls
Know what functions C++ silently writes and calls如果需要的话,C++ 编译器默认为一个类生成默认拷贝构造函数,默认拷贝赋值操作符,默认析构函数,如果没有声明任何构造函数,还会提供默认构造函数。所有默认生成的函数的访问权限都是public,所有默认生成的函数都是内联的。如果需要的话,指的的是执行的语句需要类具有上述函数。例如class Empty {};Empty e1; // 默认构造函数Empty e2(e1); // 默认翻译 2021-06-15 21:16:54 · 99 阅读 · 0 评论 -
Name lookups in C++ templates
Question当没有 -fpermissive 选项时,有一些代码不再编译。下面是g++的输出:template_eg.cpp: In instantiation of 'void Special_List<T>::do_other_stuff(T*) [with T = int]':template_eg.cpp:27:35: required from heretemplate_eg.cpp:18:25: error: 'next' was not declared in th翻译 2021-06-07 11:03:05 · 130 阅读 · 0 评论 -
std::bind
std::bind定义于头文件 <functional>template <class F, class... Args> (since C++11)/*unspecified*/ bind(F&& f, Args&&... args); (until C++20)template < class F, class... Args> (1)constexpr /*unspecified*/ bind(翻译 2021-06-04 10:19:52 · 436 阅读 · 0 评论 -
C++ Memory model
Memory model为C++抽象机,定义计算机内存存储语义。向C++程序提供的内存是一个或多个连续的字节序列。内存中每一个byte都有独一无二的地址。Byte一个byte是内存中最小的可寻址单元。它被定义为一个bits的连续序列,其足够容纳任何UTF-8(256个不同值)编码单元的值和任何basic execution character set(要求为单字节的96个字符)的成员的值。与C类似,C++支持8位字节,或者更大。类型 char, unsigned char 和 signed cha翻译 2021-06-03 21:12:25 · 415 阅读 · 0 评论 -
std::atomic
std::atomic翻译 2021-06-03 14:25:13 · 966 阅读 · 0 评论 -
std::function
std::function定义于头文件 template<class>class function; /*未定义*/template < class R, class... Args>class function<R(Args...)>;类模板 std::function 是一种通用目的的多态函数封装器。std::function实例能够存储,拷贝,和调用任何CopyConstructible Callable 的对象–函数,lambda 表达式,bind翻译 2021-06-02 21:20:10 · 481 阅读 · 0 评论 -
C++ named requirements: Callable
C++ named requirements: Callable一个 Callable 类型是适用于 INVOKE (用于,e.g.,srtd::function, std::bind,和 std::thread::thread) 操作的类型。操作可能被显式的使用库函数std::invoke执行。Requirements:类型T满足Callable,如果有:f, 一个类型为T的对象ArgTypes,合适的参数类型列表R,合适的返回值下列表达式必须合法:INVOKE<R>(f,翻译 2021-06-02 21:19:53 · 274 阅读 · 0 评论 -
移动语义
1. 值分类每个C++表达式(带操作数的操作符,字面量,变量名,等)被分类为两个独立属性:类型和值类别。每个表达式持有一些非引用类型,且每个表达式明确属于三种基本的值类别之一:prvalue(纯右值),xvalue(亡值),和lvalue(左值),定义如下:glvalue(泛(“generalized”)左值)是一个表达,其求值决定了对象、位域或函数的标识。prvalue(纯右值)是一个表达式,其求值为:计算操作数与操作符的值(这样的纯右值没有结果对象),或初始化一个对象或者一个位域(这样的p原创 2021-05-20 17:54:29 · 134 阅读 · 0 评论 -
decltype specifier
decltype specifier检查实体的声明类型,或者表达式的类型和值分类。Syntaxdecltype ( entity ) (1)decltype ( expression ) (2)Explanation如果参数时一个未被括号括起的 id-expression 或者未被括号括起的 class member access expression,然后 decltype 生成表达式命名的实体的类型。如果没有这样的实体,或者如果参数命名一系列的重载函数,程序是异构的。如果参数是T类型翻译 2021-05-18 14:29:11 · 94 阅读 · 0 评论 -
Template Meta programming reference
sizeof... operator查询参数包(parameter pack)中的元素数量。语法sizeof...( parametet pack ) // (since c++11)std::decay定义于头文件<type_traits>template< class T >struct decay;Applies lvalue-to-rvalue, array-to-pointer, and function-to-pointer implicit conv翻译 2021-01-11 16:50:39 · 135 阅读 · 0 评论 -
类中的静态常量
关于类中静态常量的声明和定义class Test {public: static const int const_value = 1;};static const int const_value = 1为类中的声明式,而非定义式。定义与声明定义即为一个声明,它定义有声明引入的实体。除了下述,每个声明都是一个定义:无函数体的函数声明 int f(int); // declares, but doesn't define f有 extern 存储类说明符,或语言链接性说明符( 例如原创 2021-02-07 19:15:20 · 1539 阅读 · 1 评论 -
C++ 存储期和链接性
什么是存储期?C++ 中存储期是用户声明对象的属性之一;用户声明:声明一个名字,在声明过程中关联程序中声明指定的实体,如声明一个变量、函数,类,模板、命名空间等等;所有的名字都在某段时间驻存在内存中,存储期代表声明的名字在内存中驻存的时期,程序只能在名字的存储期中引用该名字;存储期类别存储期分为:自动存储期静态存储期线程局部存储期动态存储期自动存储期自动存储期在对象的声明点开始分配,在对象所在块作用域结束时,解分配,所有局部对象,只要没有使用声明说明符static、extern翻译 2021-02-23 20:57:22 · 315 阅读 · 0 评论