
C&C++
文章平均质量分 82
C和C++语言相关知识
hn_tzy
这个作者很懒,什么都没留下…
展开
-
C++11中的可变长模板参数
initializer_list用于初始化一个int类型的列表,(cout原创 2024-09-23 21:32:10 · 1056 阅读 · 0 评论 -
C++11中的模板别名
模板别名允许程序员以更简洁、更具可读性的方式引用复杂的模板类型,尤其是在涉及模板元编程或高度泛型的代码库时。模板别名可以通过 using 关键字来声明。这里,AliasName 是你选择的别名,TypeOrTemplateName 是你想要引用的模板类型或模板名称,而 Args... 是模板参数,可以是零个或多个。总的来说,C++11中的模板别名是一种强大的特性,它使得模板类型的引用更加简洁和灵活,是泛型编程和模板元编程中不可或缺的工具。原创 2024-09-21 20:50:22 · 575 阅读 · 0 评论 -
C++11中的array类型
C++11标准中引入的std::array是一个固定大小的容器,它封装了C风格的数组,同时提供了更多的功能和类型安全。std::array定义在头文件<array>中,它是一个模板类,模板参数包括存储元素的类型和数组的大小。与std::vector相比,std::array的大小在编译时就已确定,并且不支持动态调整大小。std::array提供了一系列成员函数,比如size()来获取数组的大小,begin()和end()来获取指向数组首元素和尾元素之后位置的迭代器等。的方式来处理固定大小的数组。原创 2024-09-19 09:23:51 · 449 阅读 · 0 评论 -
C++11中的统一初始化列表
C++11 引入了统一初始化列表(Uniform Initialization List),也被称为列表初始化(List Initialization)或大括号初始化(Brace Initialization),它为 C++ 中的对象初始化提供了一种更加通用和清晰的方式。总之,C++11 中的统一初始化列表为 C++ 编程带来了很多便利和优势,它使得代码更加清晰、类型更加安全,并且支持更加灵活的初始化方式。:在模板编程中,统一初始化列表可以确保类型安全,因为编译器可以更准确地推断出类型。原创 2024-09-18 20:34:51 · 498 阅读 · 0 评论 -
C++11中新引入的enum类型
在C++11中,引入了一个新的枚举类型——enum class(或称为作用域枚举类型),它相较于传统的enum类型有几个关键的不同点。enum class提供了更强的类型检查和封装,减少了命名冲突的可能性,并允许更加清晰地表达枚举的意图。enum class是C++11引入的一种新的枚举类型,它通过提供作用域限定、避免隐式类型转换以及允许指定底层类型等方式,改进了传统枚举类型(enum)的使用。此外,传统枚举的作用域是从声明点到声明该枚举的文件末尾,这可能会导致在不同上下文中名称的冲突。原创 2024-09-06 21:39:36 · 455 阅读 · 0 评论 -
C++11中的static_assert运算
static_assert 是 C++11 引入的一个非常有用的编译时断言机制,它允许开发者在编译时检查代码中的条件是否满足,如果条件不满足,则编译器会报错,从而阻止编译过程的继续。这种机制在模板元编程、类型安全的检查以及确保代码在编译时满足特定条件等方面非常有用。二、static_assert 的基本语法。2、检查模板参数是否为特定类型。原创 2024-09-04 20:16:44 · 486 阅读 · 0 评论 -
C++11中的constexpr
在C++11及以后的版本中,constexpr关键字被引入,用以表示常量表达式(Constant Expression)。常量表达式是值在编译时就能确定,并且在程序运行期间不会改变的表达式。使用constexpr,开发者可以指定函数或变量为编译时常量,这有助于提升程序的性能和可读性。总的来说,constexpr是C++11引入的一个非常有用的特性,它允许开发者编写在编译时就能确定值的代码,从而可能带来性能上的提升和代码上的优化。这意呀着constexpr变量一旦被定义,其值就。constexpr变量。原创 2024-09-03 22:22:38 · 405 阅读 · 0 评论 -
C++11 中的move和forward函数
它接受一个参数(通过通用引用,即模板类型参数的右值引用),并返回该参数的右值引用(或对于左值参数,在概念上返回一个左值引用,尽管实际上是通过返回右值引用来模拟的)。总之,std::move 和移动语义是C++中用于优化性能和资源管理的重要工具,通过允许对象在赋值或初始化时转移资源而非复制它们,它们可以减少不必要的资源复制并提高程序效率。但是,实际使用时,我们通常会通过std::forward_as_tuple或直接在模板函数中使用std::forward来利用C++的类型推导特性,使得代码更简洁。原创 2024-09-02 22:13:41 · 1144 阅读 · 0 评论 -
C++中的右值引用
C++11引入了许多新特性,其中右值引用(Rvalue References)是一个非常重要的概念,它极大地增强了C++处理临时对象和移动语义的能力。右值引用通过类型后加&&来标识,它允许我们区分对象的值类别(左值或右值),进而可以编写更灵活、效率更高的代码。通过decltype可以获取表达式的类型,并使用std::is_lvalue_reference和std::is_rvalue_reference来检查这个类型是否是左值引用或右值引用。不过,它们的使用场景暗示了表达式的预期角色(作为右值传递)。原创 2024-09-01 20:03:40 · 1052 阅读 · 0 评论 -
C++11中的nullptr
NULL 通常是宏定义,其值在 C 中通常定义为 (void*)0,在 C++ 中可能定义为 0 或 (void*)0,这取决于编译器和平台。nullptr 可以与 C++ 标准库中的智能指针(如 std::unique_ptr 和 std::shared_ptr)一起使用,以表示空智能指针。然而,在这些情况下,通常不需要显式地比较智能指针是否为 nullptr,因为智能指针提供了自己的空状态检查方法(如 unique_ptr::operator bool())。二、nullptr的优势。原创 2024-08-31 21:21:30 · 482 阅读 · 0 评论 -
C++11中的lambda匿名函数
从输出的地址可以知道,lambda函数内的变量x与函数外的变量x不是同一个变量,只是用外部x变量的值初始化了函数内的x变量(相当于传值的形参)。x以引用传递,y以值传递,所以在lambda函数内修改的x是函数外的x,而y则是lambda函数内的y,与函数外的y不是同一个变量。同时增强了函数式编程的能力。捕获的变量(如果是引用捕获)在lambda函数体之外的生命周期结束时,引用可能变为悬空引用,使用时需要特别注意。从输出的地址可以知道,lambda函数内的变量x与函数外的变量x是同一个变量(地址相同)。原创 2024-08-30 21:57:00 · 1070 阅读 · 0 评论 -
C++11中新增的for功能
C++11中新增的for循环功能,通常被称为范围基于的for循环(Range-based for loop),它是一种简化的for循环语法,用于遍历容器(如数组、std::vector、std::list等)或其他序列中的所有元素。总的来说,C++11中的范围基于的for循环是一个强大且方便的特性,它极大地简化了遍历容器和序列的代码编写。collection:可以迭代的集合类型,如数组,及STL中的大部分容器(stack和queue不可以)。datatype:表示某一数据类型,常使用auto自动推断。原创 2024-08-29 22:38:37 · 821 阅读 · 0 评论 -
C++11中的decltype关键字
注意:在上面例子中的 auto&& iterator ,虽然 decltype 可以推导出 iterator 的类型(包括引用类型),但在这个特定的上下文中,使用 auto&& 主要是为了转发引用(也称为通用引用),而不是为了捕获迭代器的引用类型。在以上这个例子中,getElement 函数使用了 decltype(c[i]) 来推导其返回类型,这确保了函数能够返回与容器中元素相同的类型。在模板编程中,经常需要根据模板参数的类型来推导函数的返回类型。1. 模板函数返回类型推导。,只是用来查询其类型。原创 2024-08-28 21:24:37 · 874 阅读 · 0 评论 -
C++11更新的特性
一、auto关键字二、decltype关键字三、for迭代循环四、lambda匿名函数五、智能指针: shared_ptr、unique_ptr、weak_ptr六、右值引用&&七、移动语义:move, forward八、空指针常量:nullptr九、常量表达式关键字:constexpr十、静态断言:static_assert十一、类枚举:enum class十二、统一初始化列表:initiallize_list: {}十三、堆数组:arra原创 2024-08-27 21:34:17 · 315 阅读 · 0 评论 -
C++11中的auto关键字
auto不能用于函数声明中代替返回类型,但在C++14及更高版本中,你可以使用auto在函数声明中的尾置返回类型(trailing return type)来指示函数的返回类型,但这种情况下auto不是用来推导局部变量或函数参数的类型,而是用于指定函数的返回类型依赖于其参数的类型或函数体内的其他逻辑。虽然auto可以推导出指针和引用的类型,但对于复杂的指针和引用类型(如多层指针、指向数组的指针等),auto的使用可能会让代码可读性变差。使用auto可以自动推导迭代器的类型,使代码更简洁。原创 2024-08-27 21:33:21 · 752 阅读 · 0 评论 -
C++中的智能指针介绍及使用
在这个示例中,A类持有一个指向B的std::shared_ptr,而B类持有一个指向A的std::weak_ptr。与 std::unique_ptr 不同,std::shared_ptr 允许多个 shared_ptr 实例共享对同一对象的所有权。std::weak_ptr 通常是通过一个 std::shared_ptr 来创建的,这样它就指向了由 std::shared_ptr 管理的同一个对象。与 std::unique_ptr 不同,std::shared_ptr 支持复制操作,这会增加引用计数。原创 2024-08-26 21:30:28 · 1566 阅读 · 0 评论 -
C++中的static_cast函数
是 C++ 中的一个类型转换操作符,用于在编译时进行类型转换。它主要用于基本数据类型之间的转换,以及类的指针或引用之间的向上转换(将派生类指针或引用转换为基类指针或引用)和某些情况下的向下转换(将基类指针或引用转换为派生类指针或引用,但需要注意这种转换的安全性)。原创 2024-07-23 22:18:50 · 819 阅读 · 0 评论 -
windows函数之注册表函数
比较详细的windows操作系统中的注册表操作函数集合。原创 2024-06-04 11:15:51 · 1046 阅读 · 0 评论 -
windows API函数之文件类函数(二)
整理的关于windows API的文件类函数。原创 2024-05-10 11:23:19 · 1078 阅读 · 0 评论 -
二. windows API之消息函数
windows操作系统中的消息类函数(系统调用)。原创 2024-04-28 08:24:41 · 1139 阅读 · 0 评论 -
Windows API函数之WNetAddConnection2
WNetAddConnection2 是一个Windows API函数,用于建立与网络资源(如网络驱动器或共享文件夹)的连接。原创 2024-04-24 17:17:26 · 1128 阅读 · 0 评论 -
Windows操作系统中的API函数大全
Windows操作系统中的API函数大全,整理得十分详细。原创 2024-04-24 17:07:48 · 575 阅读 · 0 评论 -
Windows API函数之网络类函数
本文档中包含了Windows API中有关网络类型的函数。原创 2024-04-24 17:03:34 · 1070 阅读 · 0 评论 -
C++ 中的 inline 用法
1、引入 inline 关键字的原因在 c/c++ 中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数。栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间。在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足而导致程序出错的问题,如,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。下面我们来看一个例子:实例#include <stdio.h> inline const char *..原创 2021-10-25 09:02:24 · 171 阅读 · 0 评论 -
C++中浮点数的格式化输出
C++中浮点数的输出方式有:定点输出法:我们平常日常生活中书写小数的方法,小数点不能随便移动,如3.1415926、123456.789; //设置浮点数按定点方式输出std::cout.setf(std::ios_base::fixed, std::ios_base::floatfield); 科学计数输出法:将一个浮点数写成一个数乘以10的n次方的形式,如123456.789可以写成1.23456789乘以10的5次方,0.618可以写成6.18乘以10的-1次方,在C++中分别表示原创 2021-08-14 16:00:10 · 9651 阅读 · 2 评论 -
linux下GCC编译过程与动态链接库和静态链接库
1. 库的介绍库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。 windows上对应的是.lib .dll linux上对应的是.a .so在这里先介绍下Linux下的gcc编译的几个选项g++ -c hellospeak.cpp会将hellospeak.cpp转载 2021-04-14 17:13:00 · 331 阅读 · 0 评论 -
C语言编程规范 clean code
目的规则并不是完美的,通过禁止在特定情况下有用的特性,可能会对代码实现造成影响。但是我们制定规则的目的“为了大多数程序员可以得到更多的好处”, 如果在团队运作中认为某个规则无法遵循,希望可以共同改进该规则。参考该规范之前,希望您具有相应的C语言基础能力,而不是通过该文档来学习C语言。 了解C语言的ISO标准; 熟知C语言的基本语言特性; 了解C语言的标准库; 总体原则代码需要在保证功能正确的前提下,满足可读、可维护、安全、可靠、可测试、高效、可移植的特征要求。约定转载 2021-04-07 22:15:04 · 4270 阅读 · 1 评论 -
VC中的大写标识符前缀解析
大写标识符前缀对照表 序号 前缀 解析 1 CS_ ClassStyle的缩写:类风格选项 2 CW_ CreateWindow的缩写:创建窗口选项 3 DT_ DrawText的缩写:绘制字符串选项 4 IDC_ IDCursor的缩写:预定光标指针样式选项 5 IDI_ IDImage的缩写:预定图片编号选项 6 MB_ MessageBox的缩写:弹出消息窗口选项 7 SND_原创 2021-03-01 12:28:22 · 275 阅读 · 0 评论 -
C++字符串转换工具
本工具可以在字符串与其他基本类型之间进行转换/************************************文件:str_tools.h作者:hntzy描述:本类是一个字符转换工具*************************************/#ifndef __STR__TOOLS__H__#define __STR__TOOLS__H__#include <string>#include <strstream>class Str原创 2020-12-03 11:55:46 · 327 阅读 · 0 评论 -
Qt的工程文件(.pro) -- 转
Qt 工程 pro文件工作中,感觉pro文件的有些内容真不太懂,现系统性的学习一下。于此备录,分享共勉。为了更好的理解,先创建一个简单的工程作为实践。【1】创建一个pro文件1.1 新建proDemo工程。步骤如下:Qt Creator--->New Project--->应用程序--->Qt Widgets Application--->名称为:proDemo(创建路径自己拟定,本地为F:\Source\proStudy)--->类信息保持不变--->完转载 2020-05-17 15:29:32 · 1009 阅读 · 0 评论 -
g++(转)
g++gcc and g++分别是GNU的c &c++编译器。gcc/g++在执行编译的时候一般有下面4步:⒈预处理,生成.i的文件[预处理器cpp]。⒉将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs]。⒊由汇编变为目标代码(机器代码)生成.o的文件[汇编器as]。⒋连接目标代码,生成可执行程序[链接器ld]。中文名GNU的c++编译器外文名...转载 2020-04-30 09:27:10 · 231 阅读 · 0 评论 -
Linux的.a、.so和.o文件
在说明Linux的.a、.so和.o文件关系之前,先来看看windows下obj,lib,dll,exe的关系windows下obj,lib,dll,exe的关系 lib是和dll对应的。lib是静态链接库的库文件,dll是动态链接库的库文件。 所谓静态就是link的时候把里面需要的东西抽取出来安排到你的exe文件中,以后运行你的exe的时候不再需要lib。 ...转载 2020-03-02 11:19:17 · 322 阅读 · 0 评论 -
C/C++ pragma 预处理指令
在所有的预处理指令中,#Pragma指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C ++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为: #Pragma Para其中Para 为参数,下面来看一些常用的...转载 2020-02-27 08:39:07 · 204 阅读 · 0 评论 -
如何防止头文件被重复包含、嵌套包含(转)
【转自】http://hi.baidu.com/zengzhaonong/blog/item/8a8871062d481f7f03088106.html#include文件的一个不利之处在于一个头文件可能会被多次包含,为了说明这种错误,考虑下面的代码:#include "x.h"#include "x.h"显然,这里文件x.h被包含了两次,没有人会故意编写这样的代码。但是下面的代码:...转载 2020-02-19 15:56:41 · 469 阅读 · 0 评论 -
用C++编写一个ubuntu下改变终端字体颜色的小工具
Ubuntu下控制码:常用的ANSI控制码如下(有些不支持):\033[0m关闭所有属性\033[1m高亮\033[2m亮度减半\033[3m斜体\033[4m下划线\033[5m闪烁\033[6m快闪\033[7m反显\033[8m消隐\033[9m中间一道横线10-19关于字体的21-29基本与1-9正好相反30-...原创 2019-12-12 20:08:24 · 458 阅读 · 2 评论 -
Linux C/C++ 如何输出彩色字体
先举个例子:#include <iostream>int main(){ std::cout<<"\033[33mHello \033[34mworld!\033[0m"<<std::endl; return 0;}执行以上代码,你将会看到红色的Hello和蓝色的world!观察上述代码,你会发现我用了三个\033[*m这就是Linu...转载 2019-06-17 09:36:57 · 1997 阅读 · 0 评论 -
VS2010 学习版序列号(转)
转自:http://blog.youkuaiyun.com/luozhuang/article/details/8016558VC# 2010 Express: PQT8W-68YB2-MPY6C-9JV9X-42WJVVC++ 2010 Express: 6VPJ7-H3CXH-HBTPT-X4T74-3YVY7VWD 2010 Express: CY8XP-83P66-WCF9D-G3P42-K...转载 2019-04-15 10:40:27 · 8338 阅读 · 0 评论