草庐IT

Constants

全部标签

c++ - C++中的比较

就比较两个constchar*而言,这是C++中的有效代码吗?constchar*t1="test1";constchar*t2="test2";t2="test1";if(t1==t2){cout不使用strcmp? 最佳答案 不,您正在比较指针值(即:地址),而不是它们的内容。该代码并非无效,只是可能没有达到您的预期。在C++中,你应该避免使用constchar*而使用std::string:#includestd::stringt1("test1");std::stringt2("test2");if(t1==t2){/*..

c++ - 使 std::map key const 有意义吗?

这个问题在这里已经有了答案:Whatisdifferencebetweenconstandnonconstkey?(7个答案)关闭9年前。定义std::map时,将键类型设置为const是否有意义?

c++ - 使用声明和 const 重载

假设我在一个基类中有两个版本的operator->(在const上重载)。如果我说usingBase::operator->;在派生类中,我可以访问两个版本还是只能访问非常量版本? 最佳答案 与姓名隐藏相同的业务。全有或全无。使用声明(7.3.3)带来一个名称,而不是一个成员。ISO/IEC14882(2003),7.3.3.1/Ausing-declarationintroducesanameintothedeclarativeregioninwhichtheusing-declarationappears.Thatnameisa

c++ - 构造函数设置的 "const variables"用于表示 C++ 数组的边界?

下面的代码可以编译并且运行良好:classTest{private:constunsignedMAX;public:Test(constunsignedintn):MAX(n){}voidfoo(){intarray[MAX];...}};但是真的可以吗?我的意思是:Testa(3);Testb(8);array实际上分别有3个和8个单元格吗?如果是这样,是不是因为array是一个自动var并使用适当的维度进行实例化?谢谢 最佳答案 你写的在c99有效但不有效c++.我当然是在谈论您对VLA的使用的,而不是完整的片段。当使用g++-

C++ 中的 C# 只读(与 const 的细微差别)

有很多关于C#中readonly的C++等价物的问题,提到const。然而,到目前为止,据我所知,我发现没有一个是真正正确的,甚至没有提到我在这里追求的细节。只读字段可以在ctor(spec)中设置(甚至多次)。这允许在最终决定值之前执行各种操作。另一方面,C++中的Const行为略有不同(在C++和C#中),因为它要求最终值在ctor运行之前可用。有没有办法在C++中仍然实现readonly的行为? 最佳答案 是的,使用const-在编译时不必知道该值:structX{constinta;X(inty):a(y){}};//...

c++ - 为什么要有 const 和非常量访问器?

为什么STL容器定义访问器的常量和非常量版本?定义constT&at(unsignedinti)const和T&at(unsignedint)而不仅仅是非常量版本有什么好处? 最佳答案 因为您无法在constvector对象上调用at。如果您只有非const版本,则如下:conststd::vectorx(10);x.at(0);不会编译。const版本使这成为可能,同时阻止您实际更改at返回的内容-这是根据契约(Contract),因为vector是const.非const版本可以在非const对象上调用,并允许您修改返回的元素,

c++ - 从 GLSL 着色器获取常量

我有一个用GLSL编写的着色器,其中包含一组用于保存光照数据的结构。我使用常量来声明数组大小,这是一种很好的做法。假设这个变量声明为constintNUM_POINT_LIGHTS=100;我如何使用C++将这些数据从着色器中提取出来,以便我的C++程序确切地知道有多少灯光可供它使用?我试过将其声明为constuniformintNUM_POINT_LIGHTS=100;正如预期的那样,这不起作用(尽管很奇怪,看起来统一规范只是覆盖了const规范,因为OpenGL提示我正在用一个非常量值初始化一个数组)。我也试过了constintNUM_POINT_LIGHTS=100;unifor

c++ - 涉及 const unique_ptr 的 move 构造函数

在下面的代码中,我将p设置为const,因为它在Foo的生命周期内永远不会指向任何其他int。这不会编译,因为调用了unique_ptr的复制构造函数,这显然已被删除。除了使p非常量之外还有什么解决方案吗?谢谢。#includeusingnamespacestd;classFoo{public://xisalargestructinrealityFoo(constint*constx):p(x){};Foo(Foo&&foo):p(std::move(foo.p)){};private:constunique_ptrp;}; 最佳答案

c++ - 使用 std::function 参数重载函数:为什么从未调用 const 方法?

#include#include#include#includeusingnamespacestd;classA{public:voiddoStuff(functionfunc)const{coutfunc){cout(str);func(mutableString);});}private:vectorm_vec;};intmain(){autoa=A{};a.doStuff([](string*str){*str="Imodifiedthisstring";});}在此示例中,从未调用const方法。如果代码看起来很奇怪,这就是我正在尝试做的事情:我让客户通过传递一个函数来迭代对象

c++ - 用相同类型的对象覆盖对象

下面的定义是否明确?#include#includeusingnamespacestd;structConst{constinti;Const(inti):i(i){}intget0(){return0;}//bestaccessorever!};intmain(){Const*q,*p=newConst(1);new(p)Const(2);memcpy(&q,&p,sizeofp);couti;return0;}请注意,在构造第二个Const之后,p并没有在语义上(故意?)指向新对象,并且第一个已经消失,所以它是可用的"作为void*”。但是第二个对象是在完全相同的地址构造的,因此p