当我们使用C++时,库的基础知识比较熟悉,尤其是在C++中创建字符串时使用的std::string。这无疑是对旧的C风格“字符串”(使用以空字符结尾的字符数组)的一种改进。然而,C++标准库在C++17和C++20中引入了更有用的组件,可以帮助你编写更高效的代码。
string_view为c++17之后出现,其实就是leveldb中的slice,其目的在于解决内存拷贝、高效的substr。
在C++98中,为了支持Unicode字符,使用wchar_t类型来表示“宽字符”,但并没有严格规定位宽,而是让wchar_t的宽度由编译器实现,因此不同的编译器有着不同的实现方式,GNU C++规定wchar_t为32位,Visual C++规定为16位。由于wchar_t宽度没有一个统规定,导致使用wchar_t的代码在不同平台间移植时,可能出现问题。这一状况在C++11中得到了一定的改善,从此Unicode字符的存储有了统一类型: (1)char16_t:用于存储UTF-16编码的Unicode字符。 (2)char32_t:用于存储UTF-32编码的Unicode字符。 至于UTF-8编码的Unicode数据,C++11还是使用了8bits宽度的char类型数组来表示,而char16_t和char32_t的宽度由其名称可以看出,char16_t为16bits,char32_t为32bits。
---- 概述 C++11标准越来越趋于稳定和成熟,国外c++11如火如荼而国内却依然处于观望期。每当提到C++很多程序员都很抵触,特别是学术界的呼声更高一些。其实不然,语言即工具,语言的好坏不在于本身,而在于驾驭它和适用它所在的范围所决定的。那么为什么国内大多数程序员都会遭到抵触呢?我觉得原因有如下(不要劈我,仅此个人意见): C++是对C语言进行了抽象同时又支持了很多面向对象的特性,在趋于底层设计时又对上层进行封装和扩展。它是从计算机科学层面去设计和演化的,如果想写出高效和稳定的程序,那么你就必须具备基
基本数据类型是C++最基本的内容,虽然各种计算机语言的基本数据类型的含意和用法大体相同,但各种语言下基本数据类型的字节大小,数值范围等是不一样的,这也是程序开发都必须要了解的。
C11标准是C语言标准的第三版(2011年由ISO/IEC发布),前一个标准版本是C99标准。
C++17标准库里面引入了轻量级的只读字符串表示类型string_view,用来替代const char* 和const string&,在传入函数的时候减小内存开销(因为string_view类只包含字符串的指针和字符串的长度值,开销小于string类型)。
在很大程度上,C++是C的超集,这意味着一个有效的C程序也是一个有效的C++程序。
转载自:http://blog.csdn.net/dbzhang800/article/details/7540905
使用u””为能至少储存UTF-16的16位元编码,对应’\u’表示16位元的字符。
原文链接:https://blog.csdn.net/humanking7/article/details/81292013
C++11新标准中引入了用户自定义字面量,也叫自定义后缀操作符,即通过实现一个后缀操作符,将申明了该后缀标识的字面量转化为需要的类型。考察如下代码:
本文只会介绍C++ 学习时的一些细节,不会详细介绍C++的基础知识,如有需要学习基础知识的,请直接阅读《C++ Primer》一书。
在之前C语言就经常用到ASCII编码: ASCII (American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准 ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符
在Kivy中,通过pyjnius扩展能够间接调用Java代码,而pyjnius利用的是Java的反射机制。可是在Python对象和Java对象中转来转去总让人感觉到十分别扭。好在android提供了binder这个进程间通信的功能,Java中的Service也是基于Binder的C++代码封装来实现进程间通信的,这也为从Python代码中绕开pyjnius直接訪问Java代码提供了可能,既然Java的Service是基于C++的封装来实现的,也相同能够在Python中封装相同的C++代码,这篇文章解说了怎样通过binder在Python代码中直接訪问Java的Service。如WifiService。
一、数值的极值概述 数值类型有着与平台相依的极值 C++标准规定了各种类型必须保证的最小精度。这些最小值如下图所示: 类型 最小长度 char 1byte(8bits) shortint 2bytes int 2bytes longint 4bytes longlongint 8bytes float 4bytes double 8bytes longdouble 8bytes 二、numeric_limits 传统C语言使用预处理器常量来决定数值的极值,其中整数常量定义于<climits>或<li
Strings C-style strings have a special feature:The last character of every string is the null character .Consider the following two declarations: char dog[8] = {'b','e','a','u','x',' ','I','I'};// not a string char cat[8] = {'f','a','t','e','s','s','a','\0
main:操作系统通过调用main函数来运行C++程序,返回类型必须为int,即整数类型。
之前我写过一系列的c/c++ 从汇编上解释它如何实现的博文。从汇编层面上看,确实c/c++的执行过程很清晰,甚至有的地方可以做相关优化。而c++有的地方就只是一个语法糖,或者说并没有转化到汇编中,而是直接在编译阶段做一个语法检查就完了。并没有生成汇编代码。也就是说之前写的c/c++不能涵盖它们的全部内容。而且抽象层次太低,在应用上很少会考虑它的汇编实现。而且从c++11开始,加入了很多新特性,给人的感觉就好像是一们新的编程语言一样。对于这块内容,我觉得自己的知识还是有欠缺了,因此我决定近期重新翻一翻很早以前买的《c++ primer》 学习一下,并整理学习笔记
如今,市面上编程语言几百种,很多人觉得Python、 JAVA这种语言比较火,是不是C语言就不行了呢?
20世纪70年代初,贝尔实验室创建了C语言,它是开发UNIX的副产品。很快C就成为了最受欢迎的编程语言之一。但是对于Bjarne Stroustrup来说,C的表达能力还不够。于是,他在1983年的博士论文中扩展了C语言。
https://technet.microsoft.com/zh-cn/learning/bb531344.aspx
原子操作就是在多线程程序中“最小的且不可并行化的”操作,意味着多个线程访问同一个资源时,有且仅有一个线程能对资源进行操作。通常情况下原子操作可以通过互斥的访问方式来保证,例如Linux下的互斥锁(mutex),Windows下的临界区(Critical Section)等。下面看一个Linux环境使用POSIX标准的pthread库实现多线程下的原子操作:
该代码是用C++编写的,它包含了各种数据类型的声明和初始化,以及如何使用cout语句来打印这些变量的值和地址。下面是每行的详细解析:
C++关键字命名空间C++输入&输出缺省参数和函数重载为什么C语言不能重载(原理)
Parcel作为Android Binder通信的基础,从源码的角度,了解下parcel的特性,还是很有必要的。
这本书真是可怕,越看才越是知道自己欠缺的东西是有多么多...第二章又看到了很多不明白的东西,还有一些C11才带来的全新的概念,结果这篇可能会稍长一点,好多东西值得慢慢消化呢。
学习c语言十几年了,却从来没有完整的将c标准库看一看,我想在这一点上我是欠缺的。作为一个技术人员,无论什么时候都不能忘记自己最擅长的技能,这次借一个偶然的契机,翻一翻c标准库,希望以后自己在技术上越来越牛。
C++17 有许多新的标准库变化,简单起见,这篇文章只介绍了以下内容:std::string_view,标准模板库中新添加的并行算法,新的文件系统库,以及3个新的数据类型:std::any, std::optional, 和 std::variant.让我们来了解一下其中的细节.
C++变量是一种在程序中存储数据的机制。变量是用于存储和操作数据的标识符。以下是C++变量的详细介绍:
数据在程序中的重要性,怎么强调都不为过,程序的本质就是通过提供数据处理逻辑,把数据从一种状态变成另一种状态的过程。处理逻辑一定是有针对性的,针对的是数据本身的特性。
从reddit/hackernews/lobsters/meetingcpp摘抄一些c++动态。
使用win11的ubuntu22.04子系统: ☞ Win11使用WSL2安装Ubuntu22.04并启用GUI应用 zhangrelay@LAPTOP-5REQ7K1L:~/cppcode$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=22.04 DISTRIB_CODENAME=jammy DISTRIB_DESCRIPTION="Ubuntu 22.04 LTS" ---- 安装: sudo apt install build-
之前的一篇博客概览式地介绍了 C++20 的概念、范围、协程和模块,下面开始介绍它的核心语言。
在编写可选择接受或返回对象的函数的时候,通常的做法是选择一个单独的布尔值来确保函数入参或者返回对象的可用性:
最近GCC 10.1.0 发布,三大编译器(MSVC、GCC、Clang)都已经支持了C++20协程,之前给 libcopp 接入 C++20协程 的计划也就提上了日程。C++20协程 在创建、切换开销和内存分配上和传统有栈协程相比有着无可比拟的优势。但是C++20全面普及还有相当长一段时间,所以我们设计的重要目标之一就是能够让以后的迁移更容易且更平滑地进行,本文则是记录了 libcopp 接入 C++20协程 时地一些性能上和平滑接入上的思考和成果。
C++20 正式发布已经有一段时间了。其中 Text Formatting 是一个我个人比较感兴趣的新组件。它主要是解决了之前字符串格式化库 ( printf 系 ) 的效率问题和运行时安全的问题。 并且新的格式设置的形式也比较友好。相关规范和用法可以参见:
之前写了 《协程框架(libcopp)v2优化、自适应栈池和同类库的Benchmark对比》 和 《C++20 Coroutine》 ,但是一直没写 C++20 Coroutine 的测试报告。
也就是说,在fun()函数内部,将参数x赋值给一个string类型的v,但是在main()函数中 ,调用fun()函数时候传入了1,这个编译器会推导为int类型,那么把一个int类型赋值给string,编译器会报错。
新年第一更!之前群友问了一个C语言问题,即int(*(*p)())、int *(*p)()和int *(*p())的区别在哪里。确实,有时C语言的类型声明是很魔性的,看着也很令人头疼。不过如果拆分开来看其实还挺好理解的。
编码风格:http://openresty.org/cn/c-coding-style-guide.html
C/C++编程不可避免地会面对内存越界引发的问题,不同的公司也会出台相应的编码规范提前对内存越界进行规避,但不管怎么说,如果想要彻底解决内存越界就要求大家养成好的编程习惯从根本上解决内存越界问题。
concept乃重头戏之一,用于模板库的开发。功能类似于C#的泛型约束,但是比C#泛型约束更为强大。
编译器信息最新动态推荐关注hellogcc公众号 2023-02-01 第187期
领取专属 10元无门槛券
手把手带您无忧上云