在C++语言中,默认初始化和值初始化这两种变量初始化方式都可以调用类型的默认构造函数。它们的形式非常相似,大部分情况下作用相同,但它们之间存在容易忽视的微小差别。
继续阅读“C++默认初始化与值初始化”C#执行顺序带来的潜在问题
编写程序的时候,人们的直观感觉通常认为,程序的执行顺序是按照语句的顺序进行的。然而,许多编程语言的规范是允许实际执行顺序与语句编写顺序不符的。实际上,编译器为了完成某种优化,常常会对一些操作进行适当的顺序调整,导致一些预料之外的现象。
继续阅读“C#执行顺序带来的潜在问题”CSV文件的地区差异和本地化
CSV是“Comma Separated Values”的简写,但CSV文件一定是逗号分隔的吗?其实并不一定。
继续阅读“CSV文件的地区差异和本地化”.NET中SortedDictionary、SortedList和SortedSet
.NET Core / .NET Standard标准库中,命名空间System.Collections.Generic
中,一些类是通过包System.Collections
分发的。本文分析了该包中不那么基础又有点令人混淆的SortedDictionary
、SortedList
和SortedSet
这三个类,并对有些相似的SortedList
和SortedSet
进行了一些性能对比。
System.Collections
包的源代码位于https://github.com/dotnet/runtime/tree/master/src/libraries/System.Collections。
解决GitLab CI中文乱码问题
在中文版Windows操作系统上使用GitLab CI Runner的时候,如果命令行的输出包含中文,则在GitLab中看到的流水线(Pipeline)日志会出现乱码情况。为了解决这个问题,可以在Runner的初始化脚本中插入语句“chcp 65001”,将命令行输出编码设为UTF-8,之后GitLab的流水线日志就能正常显示MSBuild的中文输出了。
继续阅读“解决GitLab CI中文乱码问题”在Ubuntu上编译多架构Docker镜像
Docker能够在包括ARM64、Power PC等很多不同架构的处理器平台上运行。然而,有些处理器平台上不容易找到可用于构建容器镜像的设备。例如,常见的能够运行Docker的ARM设备包括Raspberry Pi、NAS等,它们通常拥有较小的内存和性能普通的处理器,不太能够胜任构建容器镜像的任务。通过Docker的实验性功能Docker Buildx以及多平台仿真软件QEMU,可以实现在x64平台的Ubuntu操作系统中为多种架构构建Docker镜像。
继续阅读“在Ubuntu上编译多架构Docker镜像”通过MSBuild任务自动复制DLL文件
在Visual Studio中使用第三方库的时候,若第三方库没有通过NuGet分发,则通常需要自行将DLL文件复制到生成目录才能正常运行程序。通过将文件直接包含到项目中可以自动完成该任务,但会在解决方案资源管理器中看到大量DLL文件。本文介绍一种方法,通过在MSBuild文件(csproj、vcxprj等)中添加目标和任务,实现生成时自动将DLL文件复制到生成目录。
继续阅读“通过MSBuild任务自动复制DLL文件”.NET项目自动复制VC++生成的动态库
如果要在.NET的项目中使用同一个解决方案中的Visual C++动态链接库项目中的函数,则需要将Visual C++项目中生成的.dll文件复制到.NET项目的输出路径中,否则.NET程序运行时将无法加载所需的.dll文件。
使用“添加引用”功能在.NET项目中添加对Visual C++项目的引用是没有用的。MSBuild并不会把.dll文件复制到.NET项目的输出目录。
继续阅读“.NET项目自动复制VC++生成的动态库”.NET中读取HTTP请求的文件名
HTTP的响应头中的Content-Disposition项会给出建议的文件名。而.NET网络库的HttpResponseMessage.Headers中并不包含Content-Disposition这一项。以下代码会得到null,而不是相应的响应头:
using (HttpClient client = new HttpClient())
{
var request = new HttpRequestMessage(HttpMethod.Head, uri);
var result = await client.SendAsync(request);
result.Headers.TryGetValues("Content-Disposition", out IEnumerable<string> values);
return values;
}
继续阅读“.NET中读取HTTP请求的文件名” Visual C++文本文件读写编码问题
在C++程序中读写文件时,有两个因素涉及到文本编码。一是文本内容的编码,二是文件路径的编码。这两个问题如果不处理好,就可能会出现乱码或者找不到文件的问题。本文以Visual C++为例讨论相关的编码问题,并推广到Linux系统中的相关问题。
继续阅读“Visual C++文本文件读写编码问题”