草庐IT

const_buffers

全部标签

c++ - 何时更喜欢 const 左值引用而不是右值引用模板

目前正在阅读cpr请求库的代码库:https://github.com/whoshuu/cpr/blob/master/include/cpr/api.h注意到这个库的接口(interface)经常使用完美转发。只是学习右值引用,所以这对我来说都是相对较新的。根据我的理解,右值引用、模板化和转发的好处是被环绕的函数调用将通过右值引用而不是值来获取其参数。这避免了不必要的复制。它还可以防止由于引用推导而不得不生成一堆重载。然而,根据我的理解,const左值引用本质上做同样的事情。它避免了重载的需要,并通过引用传递所有内容。需要注意的是,如果被环绕的函数采用非常量引用,它将无法编译。但是,

c++ - Poco::Path 使用 const wchar_t* 编译但行为异常

使用Poco::Path我发现了一个非常奇怪的错误。见以下代码:#include#include#includeintmain(){std::wstringa_path=L"c:\\temp";//Poco::Pathfrom_wstring(a_path);//ERROR:failstocompile,expectedPoco::Pathfrom_wchar_t(a_path.c_str());//compiles...unexpectedstd::cout但上面程序的输出是(在Windows中):\而不是预期的:c:\temp查看Poco::Path文档,我看不到构造函数期望std

C++ || 类的八种函数 | 默认成员函数 | 构造函数 | 析构函数 | 拷贝构造函数 | 赋值运算符重载 | const成员函数 | 取地址及const取地址操作符重载

默认成员函数默认成员函数定义当一个类中什么成员都没有时,简称为空类。空类中真的什么都没有吗?并不是,在任何类只什么都没有的话,编译器就会自动生成以下6种默认成员函数。默认成员函数:用户没有显式实现,编译器自动生成的成员函数称为默认成员函数。C++中,6个默认成员函数。类中的成员函数,不仅仅局限于以下六种,仅仅只是以下六种,在用户没有显式实现的情况,编译器可以自动生成的成员函数。默认成员函数分类构造函数构造函数定义构造函数是特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证类中的每个成员都有一个合适的初始值,并且在对象整个生命周期内只调用一次。简单来说,就是类似于初始化In

c++ - auto const & map 迭代器的类型是什么? C++

我需要修复我的旧项目中的一些错误,我认为这是重构部分代码的最佳时机。我有一个具有以下结构的map:std::map>ComponentMap;在我需要遍历一些底层子map的某个地方,我使用了以下内容:for(std::map::iteratoriter=ComponentMap[compNameString].begin();iter!=ComponentMap[compNameString].end();++iter){//somecodeif(IsComponentOfType(iter,sCOMP_PRINCIPAL))iter->second->GetComponentValu

c++ - const_cast 在常量表达式中有效吗? (C++14, C++17)

a遇到的具体问题是编译器处理它的方式存在一些不一致。例如这段代码(https://godbolt.org/z/08Z-zi):constexprautovalue=1;static_assert(*const_cast(&value),"valueshouldbe1");使用GCC、Clang和MSVC编译良好,但使用英特尔C++编译器19.0.1失败并出现以下错误:error:expressionmusthaveaconstantvaluestatic_assert(*const_cast(&value),"valueshouldbe1");据我所知,标准并未明确声明常量表达式中不允

c++ - 构造函数参数,仅当实例为 const 时才接受指向 const 的指针

假设我有一个类:classA{B*b;public:A(B*pb):b(pb){}}并且我确保A的const方法永远不会修改b指向的对象。这样当A的实例是const时,持有Bconst*是安全的。Bconstb;Aa(&b);//compileerrorAconstca(&b);//compileerrortoo.HowcanIallowthisone 最佳答案 这不可能——构造函数甚至无法告诉对象是否(将要)const,更不用说用信息控制重载决议了。标准解决方法(通常用于迭代器)是制作A一个模板(即使它只有两个专业)并使用A来处理

c++ - const 指向成员的指针是否默认指向一个 int?

在玩指向成员的指针时,我遇到了一种似乎有点不一致并且对我来说有点违反直觉的行为。考虑以下虚拟结构:structfoo{intx;doubled;};和以下main():intmain(){intfoo::*ptr=&foo::x;doublefoo::*ptr2=&foo::d;}这里我们没有任何异常-两个指向const成员的指针。代码编译正常。引起我注意的是,当我们添加const时,情况发生了一点变化。考虑以下代码:intmain(){//nointordoubleafterconstconstfoo::*ptr=&foo::x;}代码在GCC8.2.01上编译良好。请注意,我没有指

c++ - const 重载的 operator[] 函数及其调用

我在类array中定义了两个版本的重载operator[]函数。ptr是指向array对象第一个元素的指针。int&array::operator[](intsub){returnptr[sub];}和intarray::operator[](intsub)const{returnptr[sub];}现在,如果我定义一个const对象integer1只能调用第二个函数......但是如果我创建一个非const对象然后调用如下:cout这里调用了哪个函数? 最佳答案 在您的第二个示例中,将调用非常量版本,因为不需要转换,不需要转换的调

c++ - Direct3D11(C++) : Updating Texture coordinates in constant buffer?

我正在尝试使用Direct3D制作一个相当基本的2D引擎。我制作了一个LoadImage()函数,它将图像的所有相当静态的行为存储在一个对象中。(着色器、顶点缓冲区、采样器等)我计划在常量缓冲区中使用矩阵定位顶点。但是,我还想有一个DrawImage()函数,它有一个参数来告诉纹理的哪一部分应该被绘制(剪裁),所以我必须更新纹理坐标。由于顶点缓冲区已经预定义,我想知道是否有一种方法可以通过发送到顶点着色器的常量缓冲区来更新纹理坐标?我希望我的问题足够清楚,如果您有任何疑问,请查看下面的代码。boolGameManager::GMLoadImage(Image*pImage,constc

c++ - ARM C++ - 如何将 const 成员放入闪存中?

我有这个代码classIO{public:IO(LPC_GPIO_TypeDef*port,intpin):_pin(pin),_port(port){};constint_pin;LPC_GPIO_TypeDef*const_port;voidtest(){LPC_GPIO0->FIOSET=0;}};IOled1(LPC_GPIO0,5);intmain(){led1.test();return0;}当我编译它时,我得到了textdatabssdechexfilename65608664298lpc17xx我希望const_port和_pin变量存储在闪存中,因为它们被标记为con