c++做项目时提升效率的方法学习总结! 右值引用是C++11引入的特性,它允许我们将一个临时对象(右值)绑定到一个引用上,并且可以通过移动语义(Move Semantics)来避免不必要的对象拷贝。引用的本质就是指针来实现的。指针传参当然也可以避免开辟临时栈区内存问题!在栈区开辟临时内存进行。
c++ 报错,小细节日常记录 "1\0"是const char类型,上述指针方式只是把result指针的指向强行允许指向该字符串,"1\0"占用的内存的数据类型仍然是const char类型且不允许修改。例如result[1] = ‘1’会报这个错误,写入访问权限冲突!**不会报这个错误,result就是个数组,虽然result本质还是个指针,但是此时’1’ 和’\0’是数组内的元素,可以直接修改!但这个局部变量作为指针或者引用类型的返回值是不行滴,因为函数一结束,这篇内存就被释放了!如此以来返回指针就可以!
c++知识积累(函数,源码) 如果不支持 C++20 概念,则 _Is_ranges_random_iter_v 的值由 _Is_cpp17_random_iter_v 的结果决定。_Is_ranges_random_iter_v 是一个使用模板参数 _InIt 对 _Is_ranges_random_iter_v 进行实例化的表达式。_CONSTEXPR17 宏的目的是在编写 C++17 代码时,如果使用了 C++17 新特性,但编译器不支持 C++17,则可以使用该宏进行条件编译。
c++编译器的那点事-链接属性,extern,inline cpp项目里,每个.,cpp文件将其所包含的头文件合并后,称为一个转换单元!编译器在编译每个转换单元时,会将源代码翻译成汇编代码,然后再将汇编代码翻译成机器码,并将生成的机器码和一些元数据(如符号表、调试信息等)打包成目标文件(.obj)。然后经过链接器将这些obj文件链接在一起生成exe文件。例如A.obj有定义在其他obj文件定义的函数,那么链接时候就会去对应的obj文件寻求定义来建立链接!程序中的变量,函数,结构等都有名字,这些名字具有不同的链接属性,链接器就是根据链接属性把各个obj链接起来。