C/C++
一凡stkeke
程序猿要非常勤奋地把自己变成一个懒货
展开
-
【C++】C++标准中定义的名字和标识符
标识符 identifierC++中标识符有明确的定义,对保留的标识符也有明确的说明。标识符是任意长的字母/字符,数字,下划线的序列。但是有效标识符必须以非数字起头,且是大小写敏感的,标识符中的每个字母/字符都有效。有一类特殊的标识符,被称为关键字,为C++预留,具有特殊意义,不可用作其他用途。另外还有一类标识符,用作某些操作符和标点符号的替代表示,也不可用作其他用途。例如and是&&的替代表示。应用程序最好不要使用带有双下划线或者单下划线起头后跟大写字母的标识符,这些标识符通常被原创 2021-05-19 10:49:20 · 2772 阅读 · 0 评论 -
[C++] C++标准中定义的实体(entity)/ 声明 / 定义
在C++标准中,定义了C++语言中所有的entityvaluesobjectsreferencestructured bindings (since C++17)functions(不包括lambda)。enumeratorstypesclass memberstemplatestemplate specializationsnamespacesparameter packs特别指出,预处理宏(macro)并不是C++的entity。以下为个人观点,并非C++标准定义尽管l原创 2021-05-19 09:14:43 · 2678 阅读 · 0 评论 -
[C++] Value Categories
This foil comes from Core C++ 2019.原创 2021-05-14 11:04:03 · 248 阅读 · 0 评论 -
[C++]variadic function template expansion 变元函数参数的展开规则
变元函数参数的展开规则;函数参数支持多次重复利用。#include <iostream>template<typename ... T >auto do_stuff(T ... t) // do_stuff(float, float, float){ // ...是带着圆括号进行展开操作的 std::cout << ( t - ... ) << std::endl; // (1 - (2 - 3)) => 2 std:原创 2021-05-13 17:30:31 · 265 阅读 · 0 评论 -
[C++] 如此聪明的C++编译器
如今的编译器居然如此聪明,两个函数调用(memcpy)与一条赋值语句,被直接优化为一条mov指令。真是太神奇了!!!原创 2021-05-12 09:20:36 · 231 阅读 · 0 评论 -
GCC: libgcc的用途以及交叉编译
libgcc是GCC的一部分。C语言不仅仅是由编译器构成,还包括了一个标准库。编译器在GCC包里,标准库则位于GNU C库里,即glibc包里。C编译器(cc1)肯定是要以来glibc库才能正常运行。但是编译器本身还使用了一个内部库,名为libgcc,这个库位于GCC包里,并不属于GNU C库。这个库实现了一些复杂指令,这些指令并不能由汇编器指令集提供,因此补充了汇编器的不足。但是这个libgcc库也需要链接到glibc库才能完全运行。注:GNU的标准C++库(libstdc++)也需要链接到glibc原创 2021-04-15 15:54:27 · 9087 阅读 · 2 评论 -
[C++] GCC multilib
GCC multilib主要是用于支持交叉编译(cross compiling),即编译出来的程序是用来在其他处理器平台上运行的。例如可以在x86 64位处理器上编译出x86 32位程序,运行在32位处理器上,或者在x86平台上编译出可以在ARM处理器上运行的程序。...原创 2021-04-15 08:22:22 · 4536 阅读 · 0 评论 -
GCC/G++编译过程
GCC编译过程# 编写一个最简单的C++程序$ cat hello.cppint main(){ return 0;}# -v选项可以打印出详细的编译过程,以及编译命令。$ gcc -v -o hello hello.cppUsing built-in specs. # 使用内建的specs控制编译过程COLLECT_GCC=gcc# 什么是LTO,参看下面的链接# https://stackoverflow.com/questions/19807107/what-is-原创 2021-04-13 16:32:04 · 698 阅读 · 0 评论 -
Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - MMX技术(8/E) - GCC内嵌/内置函数
File Instruction Set GCC v7.1 Intrinsic GCC v7.1 Intrinsic Declaration mmintrin.h sse2,mmx _mm_empty void _mm_empty (void) mmintrin.h sse2,mmx _m_empty void _m_empty (vo...原创 2019-01-27 14:25:28 · 650 阅读 · 0 评论 -
【C/C++】深入理解原子操作 & volatile i为什么不能保证i++的原子性
处理器支持的原子操作首先我们来讲一下处理器支持的原子操作以及为什么i++不是原子操作。从处理器层面上来讲,处理器保证基本的访存事务的原子性,例如当处理器读取存储器中的一个字节时,在读取过程未结束之前,其他的任何设备都不可以访问这个字节。这个保证对写入字节也成立。但是处理器自动能做的保护也就仅仅如此了。i++不是原子操作对于i++这样的操作,其实是分3步执行的,读取i的值,增加i的值,...原创 2019-01-18 17:00:17 · 3554 阅读 · 0 评论