Visual C++
文章平均质量分 57
金色熊族
这个作者很懒,什么都没留下…
展开
-
vs2008使用 openmp
环境windows7 vs2008。原创 2024-04-15 15:09:28 · 284 阅读 · 0 评论 -
理解移动语义(七)--返回值优化
返回值优化原创 2023-04-02 22:45:39 · 779 阅读 · 0 评论 -
理解移动语义(六)--std::forward和std::move
std::forward和std::move原创 2023-04-02 21:30:04 · 80 阅读 · 0 评论 -
理解移动语义(五)--左右值判断的常见错误
c++判断左右值类型遵循这样一条规则:只看调用现场的情况,不看以前的来源原创 2023-04-02 18:09:57 · 97 阅读 · 0 评论 -
理解移动语义(四)--引用折叠
T && 和 auto &&的引用折叠原创 2023-04-02 17:14:52 · 90 阅读 · 0 评论 -
理解移动语义(三)--万能引用
属于和不属于万能引用的情况原创 2023-04-01 15:55:22 · 90 阅读 · 0 评论 -
理解移动语义(二)--延长变量的生命周期
有右值引用,生命周期延长到引用的生命周期结束时原创 2023-04-01 15:13:53 · 336 阅读 · 0 评论 -
理解移动语义(一)左值和右值
左值和右值C++原创 2023-04-01 14:36:20 · 169 阅读 · 0 评论 -
构造函数的调用场景--构造函数与拷贝构造函数、移动构造函数之辨
在Scott Meyers的著作《Effective C++》条款5中,明确指出要“了解C++默默编写并调用哪些函数”。这里通过一个简短的C++代码,阐述哪些场景调用构造函数,哪些场景不调用构造函数。原创 2023-03-27 10:45:06 · 901 阅读 · 0 评论 -
某车企笔试题解答(2)
某车企笔试题解答(2)原创 2022-11-14 13:16:32 · 369 阅读 · 0 评论 -
windows10安装ninja过程记录
windows10安装ninja过程记录原创 2022-11-03 20:16:11 · 5081 阅读 · 3 评论 -
警惕C/C++同名函数冲突
想象这样一个情景,一个大项目,由两个彼此并不熟悉的企业合作完成。最后的交付软件是一个exe以及两个dll。两个企业各自负责一个dll。巧合的是,两个企业开发时,都依赖同一个第三方库,比如说,是opencv。但是,双方使用opencv的版本不同。由于两个opencv的dll名字不同,所以它们不会覆盖,而是共存(但是它们的头文件都是一样的)。这样带来一种假象,就是dll1和dll2将各自调用各自的opencv库。但事实并非如此。实际上,在链接时,先被链接的dll的函数将覆盖后面的同名函数。目录库原创 2022-05-22 20:55:05 · 1050 阅读 · 0 评论 -
VS2013 + Qt5.7编译ctk源码过程记录
网上介绍如何编译ctk框架的文章很多,大多数主张改ctk的源码,然后编译。我尝试了其中一个比较详细的介绍,发现走到install这一步总是失败。尽管install这一步不是必须的,但是总给人不圆满的感觉。另有一篇文章编译 CTK(Win10 + Qt 5.14.0 + VS2015)_blackwood-cliff的博客-CSDN博客_ctk编译,几乎不改源码,只是用cmake-gui配置一下,然后就能完成包括install在内的所有项目编译。我用vs2013尝试了,可行。这里把我的操作记录一下,并且补原创 2022-05-04 15:00:59 · 2285 阅读 · 0 评论 -
Qt读取xml文件,并写入另一个xml文件的示例
下面的代码利用Qt的QDomDocument等类来读取xml文件exm.xml,并写入另一个文件exm2.xml代码:#include <QDomNode>#include <QDomElement>#include <QDomDocument>#include <QFile>#include <QDebug>#include <QDomProcessingInstruction>int main(int a原创 2022-05-01 14:18:55 · 953 阅读 · 1 评论 -
利用assimp显示gltf
目录1 编译assimp5.0.12 工程2.1 pro文件:2.2config.h2.3config.h.in中注释掉如下代码:3 运行效果1 编译assimp5.0.1编译过程与我的博客win10操作系统上编译assimp库_liji_digital的博客-CSDN博客描述类似。但是由于assimp5.0.1的版本较高,vs2013编译源码会报错。错误原因是BaseImporter::importerUnits采用了初始化列表赋值,不受2013支持。假如你坚持使用..原创 2022-04-25 22:50:15 · 1172 阅读 · 0 评论 -
static_cast 相比C风格的类型转换,优势何在?
C++提供static_cast以取代c风格的类型转换。其意义在如下几个方面(转自c++ - What is the difference between static_cast<> and C style casting? - Stack Overflow):1 C++编译器在编译阶段就会针对错误的转换报错,而C风格不会。看如下例子1.1 c++风格代码:1.2 C风格类型转换不会报错,于是在运行时引起越界访问:显然,数组c对应的内存0080FA74应存储15 16 两..原创 2022-02-26 13:36:51 · 1403 阅读 · 1 评论 -
记一次调试UDP丢包
问题:在windows平台上开发的程序,UDP发送较频繁(1-2us一包),结果收数据总是有丢失。尽管单独起了一个线程专门收数据,且线程中不使用sleep休眠,避免休眠时错过数据包,但仍然无法避免丢数据。解决方案:windows下默认SO_RCVBUF的缓存是8KB.所以当发来的数据积攒超过8K时,就发生数据丢失。故在建立socket之后调用setsockopt函数,将接收缓存变为充分大的值,比如1M。 m_Socket = socket(AF_INET, SOCK_DGRAM, 0); i原创 2021-11-28 18:15:51 · 1611 阅读 · 2 评论 -
C++格式化数字输入字符串的几个办法
1 最为熟知的就是sprintf了,不多说。2 假如你用Qt的话,还可以用QString::arg()方法3 这里着重讲讲std::stringstream。它是C++17标准引进的。详情可见integer - Convert a number to a string with specified length in C++ - Stack Overflowhttps://stackoverflow.com/questions/225362/convert-a-number-to-a-strin原创 2021-10-16 14:56:09 · 1041 阅读 · 0 评论 -
C++11运行时类型识别(RTTI)示例
示例出处是Michael Wong的著作《深入理解C++11》代码清单4-16,略有改动。#include <iostream>#include <typeinfo>struct white {};struct black {};int main(void){ white a; white c; black b; std::cout << typeid(a).name() << std::endl; std::cout <&l原创 2021-10-16 14:30:23 · 194 阅读 · 0 评论 -
三元运算符(条件运算符)返回左值
三元运算符,或者叫条件运算符(conditional operator),返回的是左值。也就是说,它不仅可以赋值给其他变量,也可以被其他表达式赋值。看下面的例子#include <iostream>int main(void){ int k = 0, l = 1; (4 > 3 ? k : l) = 5;//注意,要加括号,否则l=5将率先结合在一起 std::cout << "k = " << k << ",l = " <<原创 2021-10-16 13:58:12 · 477 阅读 · 0 评论 -
澄清对于c++析构函数的误解
以前一直以为析构函数也存在继承。但是今天看了stackoverflow和微软官网的描述后,发现自己错了:随之而来的一个问题是,既然析构函数不能继承,为什么多态里面总是强调基类的析构函数应该是virtual的?cppreferencevirtual 函数说明符 - cppreference.comhttps://zh.cppreference.com/w/cpp/language/virtual上有一段解释回答了这个问题:虽然析构函数不存在虚继承,但是派生类还是覆盖了基类的虚析构函数。..原创 2021-10-07 19:58:27 · 178 阅读 · 0 评论 -
探讨侯捷老师关于variadic template讲义的一处表述
最近在学习侯捷老师的c++视频。其中关于variadic template的讲义25:00处的一处讲述似乎不对,特地拿出来与大家探讨。视频源https://www.youtube.com/watch?v=TJIb9TGfDIw&list=WL&index=4&t=1414shttps://www.youtube.com/watch?v=TJIb9TGfDIw&list=WL&index=4&t=1414s在第25分钟处,侯老师说,当args...有零个参数原创 2021-10-05 16:58:22 · 121 阅读 · 0 评论 -
VS2019 编译+调试 Bullet
本文受了 Create C++ cross-platform projects in Visual Studio | Microsoft DocsHow to set up, compile, and debug a C++ open-source CMake project in Visual Studio that targets both Linux and Windows.https://docs.microsoft.com/en-us/cpp/build/get-started-linux-cma原创 2021-09-19 11:54:02 · 792 阅读 · 0 评论 -
c/c++的逗号操作符
逗号操作符的优先级是最低的(https://zh.wikipedia.org/wiki/%E9%80%97%E5%8F%B7%E8%BF%90%E7%AE%97%E7%AC%A6)。它的形式是expression1, expression2。它首先计算expression1,然后计算expression2。而且将expression2的结果作为返回值。...原创 2021-08-22 10:37:17 · 71 阅读 · 0 评论 -
C++实现YUV转RGBA
本文受了https://blog.csdn.net/fanyun_01/article/details/100068351 的启发。但是该文章有一处谬误:YUV420的内存排列不是按照下图所示的。正确的排列应如下(来源维基百科yuv条目):根据正确的内存排列,写出相应的代码:YUV2RGB.h#pragma once#include <qglobal.h>void vFillY_U_V_Buff(const quint32 & ui32Width, con原创 2021-04-20 20:06:04 · 901 阅读 · 0 评论 -
读取多波段的tif(利用GDAL)
bmp的格式是RGBRGB.....排列下来的,每个像素的三个分量靠在一起,描述完一个像素,接着描述下一个像素。tif的格式更多样。通常的格式也是BGRBGR.....(次序与bmp相反)排列下来的,但偶尔有一些tif文件采用RRRRRR.......GGGGG.........BBBBB.....的安排。还有的tif文件内容是压缩过的。。。。这里我们只考虑三个颜色分量靠在一起的情况。下面的例子是一个tif文件,宽896,高608,三个分量。这里先把其内容取出,并交换RB的位置,然后保存为.rgb文原创 2021-04-10 13:55:42 · 2574 阅读 · 0 评论 -
一个tif转bmp的示例
本文受了https://blog.csdn.net/m0_46340275/article/details/105476139 的启发。bmp的格式是RGBRGB.....排列下来的,每个像素的三个分量靠在一起,描述完一个像素,接着描述下一个像素。tif的格式更多样。通常的格式也是BGRBGR.....(次序与bmp相反)排列下来的,但偶尔有一些tif文件采用RRRRRR.......GGGGG.........BBBBB.....的安排。还有的tif文件内容是压缩过的。。。。这里我们只考虑三个颜色原创 2021-03-15 20:20:04 · 1130 阅读 · 0 评论 -
std::vector内存结构简析
在CppCon 2019的演讲(https://www.youtube.com/watch?v=St0MNEU5b0o&t=2171s 3分48秒)中,Klaus Iglberger给出了std::vector的内存结构:vector的内容其实是3个指针构成的。第一个指针是首元素的地址,第二个指针是最后一个元素的地址,第三指针是vector::capacity的最后一个元素的地址。假如vector内容为空,则三个指针的内容均为0(nullptr)下面对其进行验证:...原创 2021-02-09 09:25:58 · 2535 阅读 · 0 评论 -
C++ primer plus第8.2.4的一处错误
《C++ primer plus》第六版中文版的268页有一处错误:声称上面的函数clone()隐藏了对new的调用。这是错误的。因为pt此时是未分配内存的。下面的代码也印证了这个分析:最后,奉上百度文库的勘误表:...原创 2021-02-08 10:41:20 · 385 阅读 · 4 评论 -
如何创建并使用unique_ptr 实例(译文)
译自https://docs.microsoft.com/en-us/cpp/cpp/how-to-create-and-use-unique-ptr-instances?view=msvc-160总述Aunique_ptrdoes not share its pointer. It cannot be copied to anotherunique_ptr, passed by value to a function, or used in any C++ Standard Libra...翻译 2021-01-10 16:13:27 · 492 阅读 · 0 评论 -
windows平台下操作std::wstring
c++支持UTF-16字符集,对UTF-16字符的读写通过std::wstring实现。下面的例子展示如何获取exe文件的绝对路径(其中包含汉字),并且显示在界面上。下面的代码受了WarZone2100源码main.cpp 函数getCurrentApplicationPath_WIN() 的启发。// WStringTest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <string>#include <vector原创 2020-07-14 21:05:29 · 932 阅读 · 0 评论 -
C++的delete this合法吗?
这是C++标准基金会(isocpp)的答案:来源https://isocpp.org/wiki/faq/freestore-mgmt#delete-thisIs it legal (and moral) for a member function to say delete this?As long as you’re careful, it’s okay (not evil) for an object to commit suicide (delete this).Here’s how..原创 2020-05-20 19:18:35 · 563 阅读 · 0 评论 -
警惕不同类型的整型变量相比较
当一个无符号整型和一个有符号整型之间比较时,可能会出错。看下面的代码:#include "mainwindow.h"#include "ui_mainwindow.h"#include <QDebug>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this);}MainWindow::~Main原创 2020-05-17 22:12:39 · 450 阅读 · 0 评论 -
自旋锁和互斥锁的区别
转自https://www.jianshu.com/p/a7f349ddcf82自旋锁是一种互斥锁的实现方式而已,相比一般的互斥锁会在等待期间放弃cpu,自旋锁(spinlock)则是不断循环并测试锁的状态,这样就一直占着cpu。互斥锁:用于保护临界区,确保同一时间只有一个线程访问数据。对共享资源的访问,先对互斥量进行加锁,如果互斥量已经上锁,调用线程会阻塞,直到互斥量被解锁。在完成了...转载 2020-04-24 21:55:00 · 567 阅读 · 0 评论 -
多线程编程时应警惕release 编译模式
原理visual studio 提供两种模式来编译C++代码:debug和release.release 模式下,编译器会“优化”代码,把它认为可以简化的逻辑简化掉。比如说以下代码:void func(){ int i = 1; int j; j = i; while(i == j){}}编译器看到 i 赋值给 j,而且后来的语句里 i j...原创 2020-02-27 19:16:16 · 985 阅读 · 0 评论 -
vs2013 64位编译 gdal库
在前面的博客里,我介绍了如何利用vs2012编译gdal。那篇博客编译的结果是用于32位程序的。本片博客介绍如何利用vs2013 编译gdal,用于64位程序。1 鼠标右键点击桌面的计算机图标,选择“属性”2 在弹出的窗口里选择“高级系统设置”3 在系统变量PATH中添加 C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\bin...原创 2020-01-27 17:37:15 · 476 阅读 · 0 评论 -
windows命令行统计文件夹下文件以及文件夹个数
这个例子统计的是一个文件夹下 文件以及文件夹的个数。但是假如文件夹下还有文件,程序将不会向向下一级继续统计。编程注意2点:1)利用命令行的 dir /b 文件夹名 | find /v /c "::" 指令来统计文件夹内的文件+文件夹数目;2)这个指令在另一个进程里运行。获取的结果通过fgets函数返回一个字符串。将字符串转换为数字就是统计结果例如统计如下文件夹:代码:原创 2018-01-25 21:01:20 · 23554 阅读 · 1 评论 -
qt 5.10 + msvc2017安装
1)从visual studio官网下载免费版msvc2017并安装2)从qt官网下载qt-unified-windows-x86-3.0.2-online.exe并运行3)安装程序将询问安装哪一版qt?我选择的是基于msvc2017-64bit编译器的qt5.10.04)接下来的步骤是从https://jingyan.baidu.com/article/020278115d99b31原创 2018-02-01 21:34:07 · 26159 阅读 · 2 评论 -
结构体中的位定义
在工作中,经常遇到按位(bit)定义结构体 的情况。由于一个字节有8个位,这时,程序员往往对bit的位置产生困惑。现在给出2个例子,来说明位的定义次序。第一个例子是将unsigned char 分成8个比特。#pragma pack(push,1)typedef struct ST_TEST{ unsigned char ucA:1; unsigned char ucB:1;...原创 2017-09-14 22:45:18 · 18586 阅读 · 0 评论 -
C++获取时间的问题
https://zhidao.baidu.com/question/505585810.html给出了2个方案。但是第一个方案是有问题的。用__DATE__, __TIME__只能给出编译时间,但是不能给出运行时的时间。方法1: 使用宏 __DATE__ 与 __TIME__ ,这俩宏代表日期与时间,直接使用就可以。方法2:#include time>int main(){ st原创 2017-05-13 22:45:06 · 335 阅读 · 0 评论