C++浮点数转换为整数的溢出问题

C++语言提供了将浮点数转换为整数的功能。但是,如果要转换的浮点数超出了整数的表示范围,会得到怎样的结果呢?这种情况在标准中是未定义行为(隐式转换 – cppreference.com)。例如,在x64架构上运行以下测试代码: std::cout << static_cast<int32_t>(std::pow(2, 31)) << std::endl; ...

2024年1月28日 · 桃又

使用APT安装Intel oneAPI的固定版本

Intel oneAPI是Intel公司的高性能异构计算工具集,包含有Intel C++编译器、Intel Fortran编译器、Intel MKL数学库等组件。要在基于APT包管理器的操作系统(如Ubuntu)上安装Intel oneAPI,可以使用Intel提供的APT源进行安装。然而,使用官方文档中列出的操作步骤安装后,安装的软件会被APT自动更新并导致潜在的兼容性问题。使用带版本号的包名可以解决这一问题。 ...

2022年12月23日 · 桃又

在CMake与Conan中使用MSYS2 MinGW x64工具链编译Windows程序

GCC(GNU Compiler Collection)是一套功能强大的编译器集合,支持C、C++、Fortran等编程语言,是Linux上应用十分广泛的一款编译器。MinGW(Minimalist GNU for Windows)将GNU工具链移植到了Windows环境,可用于编译原生的Windows应用程序。MinGW包含了GCC编译器的Windows移植版本以及用于Windows平台的链接器、汇编器等工具。但是,原始版本的MinGW只能用于编译32位程序,不支持64位程序的编译。 ...

2021年12月5日 · 桃又

map::emplace不总是比map::insert快

自C++11起,标准库中的许多集合类型提供了emplace函数,可以在集合内直接创建新元素,而不需要将现有元素复制或移动到集合内。在很多情况下,使用emplace函数能够减少复制或移动构造函数的开销,能提供比insert、push等函数更高的性能。但对于std::map和std::unordered_map而言,在某些情况下insert可能比emplace更快。 ...

2021年9月5日 · 桃又

在Visual C++中使用UTF-8格式代码文件

Visual C++(Visual Studio中的C++编译器)工程中的代码文件默认使用ANSI编码,这样容易导致以下问题: 在其他语言的环境中编辑、生成工程时可能会出现乱码,因为ANSI的具体编码取决于系统设置; 在引用第三方库(通常是UTF-8格式)的头文件时,不能正确解析文件中的非ASCII字符。 要在Visual C++的工程中使用UTF-8编码,需要实现两个目标: 让Visual Studio以UTF-8编码保存代码文件; 让编译器以UTF-8编码编译代码文件。 ...

2021年4月25日 · 桃又

C++记录程序运行时间(跨平台)

要使用标准C++实现计时功能,可以使用C++ 11中的<chrono>头文件或者使用C风格的<ctime>头文件。 ...

2021年3月10日 · 桃又

C++默认初始化与值初始化

在C++语言中,默认初始化和值初始化这两种变量初始化方式都可以调用类型的默认构造函数。它们的形式非常相似,大部分情况下作用相同,但它们之间存在容易忽视的微小差别。 ...

2021年1月25日 · 桃又

.NET项目自动复制VC++生成的动态库

如果要在.NET的项目中使用同一个解决方案中的Visual C++动态链接库项目中的函数,则需要将Visual C++项目中生成的.dll文件复制到.NET项目的输出路径中,否则.NET程序运行时将无法加载所需的.dll文件。 使用“添加引用”功能在.NET项目中添加对Visual C++项目的引用是没有用的。MSBuild并不会把.dll文件复制到.NET项目的输出目录。 ...

2019年11月3日 · 桃又

Visual C++文本文件读写编码问题

在C++程序中读写文件时,有两个因素涉及到文本编码。一是文本内容的编码,二是文件路径的编码。这两个问题如果不处理好,就可能会出现乱码或者找不到文件的问题。本文以Visual C++为例讨论相关的编码问题,并推广到Linux系统中的相关问题。 ...

2019年9月15日 · 桃又

C++编码理解以及中文显示

要正确处理编码,需要理解一个程序从代码到用户阶段的几个编码: 代码编码:代码文件使用的编码 执行编码:编译完的可执行文件中使用的编码 显示编码:在用户的界面上显示时,系统渲染文本使用的编码 ...

2018年3月18日 · 桃又