草庐IT

cpp-core-guidelines

全部标签

c++ - Pimpl with unique_ptr : Why do I have to move definition of constructor of interface to ".cpp"?

只要我不将构造函数(B)的定义移动到标题B.h中,代码就可以工作。B.hclassImp;//imp;B();//B.cpp#include"B.h"#include"Imp.h"B::B(){}~B::B(){}Imp.hclassImp{};Main.cpp(编译我)#include"B.h"Error:deletionofpointertoincompletetypeError:useofundefinedtype'Imp'C2027我能以某种方式理解必须将析构函数移动到.cpp,因为可能会调用Imp的解构:-deletepointer-of-Imp;//somethinglik

QT第一个程序命名空间详解,解释ui_widget的和xxx.cpp的联系

首先需要回顾一下cpp命名空间知识;扩展命名空间:一个文件中书写了两个相同名字的命名空间,第二个命名将作为第一个命名空间的补充例如:第一个Ui命名空间是一个前置声明;第二个Ui是具体定义,就跟函数声明和函数名义一模一样以上代码等价于一下代码:进入正题:ui_xxxx.h文件有一个命名空间Ui,其中定义了一个类MainWindow继承字Ui_MainWindow,这样就具有UI_MainWindow所有特征了。其中还有两个宏QT_BEGIN_NAMESPACE与QT_END_NAMESPACEQT_BEGIN_NAMESPACE:这是一个Qt框架中的宏,它标志着命名空间的开始。它实际上被定义为{

使用C# asp.net core 同步数据库

代码片段:文末附链接。usingDataSync.Core;usingFurion.Logging.Extensions;usingMicrosoft.Data.SqlClient;usingMicrosoft.Extensions.Logging;usingSystem.Data;namespaceDataSync.Application.DataSync.Services{publicclassDataSyncServices:IDataSyncData,ITransient{privatereadonlyobjectlockObj=newobject();//////客户端向服务端同步/

c++ - 如何通过 yaml-cpp 加载 YAML 文件?

我对yaml-cpp很陌生|.我尝试了最简单的程序,但它失败了,而且我无法从GitHub存储库中找到答案。#include#include"yaml-cpp/yaml.h"usingnamespacestd;intmain(){YAML::Nodeconfig=YAML::LoadFile("sample.yaml");return0;}sample.yaml来自官方YAML网站的示例:---!clarkevans.com/^invoiceinvoice:34843date:2001-01-23bill-to:&id001given:Chrisfamily:Dumarsaddress:

c++ - .cpp 与 .h 中的函数方法定义

为了减少工作中相当大的框架的编译时间,我正在考虑将.h文件中的类方法定义移动到它们相关的.cpp文件中,如果它们非常大或需要包含可以移动到的编译关联的.cpp文件。为了清楚起见,下面是一个人为的例子(尽管Foo::inc是一个小方法)ma​​in.cpp:#include"Foo.h"intmain(intargc,char**argv){Foofoo(argc);foo.inc();returnfoo.m_argc;}之前的Foo.h(还不需要Foo.cpp):classFoo{public:intm_argc;Foo(intargc):m_argc(argc){}voidinc()

c++ - Strawberry perl + Inline::CPP + <sstream> 未编译

也许有人可以帮助我理解。为什么会出现这个错误。我正在尝试构建使用Inline::CPP的C++代码。例子如下:#!/usr/bin/envperlpackagemainv0.1.0;usestrict;usewarnings;useInline(CPP=>CPP#ccflags=>'-std=c++11',ccflags=>'-std=gnu++11',clean_after_build=>0,clean_build_area=>0,);1;__END__此代码在linux下编译没有错误,但在strawberryperl5.26.2x64下会产生以下错误:"D:\devel\perl\

c++ - 为什么我的 C++ 应用程序在 Core i7 上比我的 C 应用程序(使用相同的库)快

我有一个用C编写的库,我有2个用C++和C编写的应用程序。这个库是一个通信库,所以其中一个API调用如下所示:intsource_send(source_t*source,constchar*data);在C应用程序中,代码执行如下操作:source_t*source=source_create();for(inti=0;iC++应用在何处执行此操作:structSource{Source(){_source=source_create();}boolsend(conststd::string&data){source_send(_source,data.c_str());}sourc

c++ - 传递 span<T> 和 std::array 作为参数有什么区别?

在他的C++CoreGuidelines,BjarneStroustrup建议在按引用传递数组时使用span。为什么不只传递一个std::array对象? 最佳答案 按值传递std::array将是复制它们。gsl::span的要点是采用它们的函数引用现有的数据数组。gsl::span能够获取运行时定义大小的数组。std::array在编译时固定。gsl::span不关心什么类型拥有数组;它只是一个指针+大小。因此,基于span的接口(interface)可以从std::vector、QVector和许多其他类型中获取数据。基于st

c++ - 当索引不是整数常量表达式时,不要使用数组下标;使用 gsl::at() 代替

我试图在MicrosoftVisualStudio中创建一些示例代码,看起来像这样intmain(){constsize_tsize=10;intarr[size];for(size_ti=0;i现在JetBrainsResharperC++在arr[i]=i;行发出以下警告Donotusearraysubscriptwhentheindexisnotanintegerconstantexpression;usegsl::at()instead我不明白这意味着什么以及如何解决这个警告。因为这是我经常使用的方案,所以我有点担心警告。谁能给我建议或指出正确的方向?编辑:将循环更改为:for

c++ - 过程入口点无法位于动态链接库 Core.dll 中

我正在将我的项目转换为使用DLL,并试图拆分我的Singleton类以避免使用模板。我的类LudoMemory,最初继承自Singleton。我现在正在尝试为其提供销毁和创建自身的功能,并让我的主引擎不依赖于Singleton。我写了一个像这样的简单销毁方法:LudoMemory*memory_Singleton=NULL;voidLudoMemory::Destroy(){LUDO_SAFE_DELETE(m_Singleton)}在运行程序时(没有编译器错误)我收到这个错误:Theprocedureentrypoint?Destroy@LudoMemory@@SAXXZcouldn