草庐IT

Const-Qualification

全部标签

c++ - 返回填充在函数内部的 const char* vector 是否是明确定义的行为

我目前正在学习vulkan。在其中一个教程中,我看到了一个大致执行以下操作的函数:#defineSOMESTRING"HelloWorld!"std::vectorbuildVector(){std::vectorvec;vec.push_back(SOMESTRING);returnvec;}当我看到这个时,我想知道:这是定义的行为吗?字符串"HelloWorld!"的内容不是位于堆栈中,因此一旦函数返回就无效了吗?如果这是未定义的行为,那么正确的方法是什么?不幸的是,由于vulkanAPI,无法使用std::string。 最佳答案

c++ - 在 C++ 中将 char* 转换为 const char*

C++中如何将char*转换为constchar*?为什么程序1可以运行而程序2不能运行?程序1(工作):char*s="teststring";constchar*tmp=s;printMe(tmp);voidprintMe(constchar*&buf){printf("GivenStr=%s",buf);}程序2(不工作)char*s="teststring";printMe((constchar*)s);//typecastingnotworkingvoidprintMe(constchar*&buf){printf("GivenStr=%s",buf);}我收到的错误:x.c

c++ - 将 zlib 与 const 数据一起使用

要使用zlib压缩/解压缩数据,首先我需要设置一个名为z_stream的结构.z_stream有两个非常量指针叫做next_in和next_out.如果我想做这样的功能:voidungzip(std::vector&dst,conststd::vector&src){z_streamstrm;//morecode}和其他类似的voidgzip(std::vector&dst,conststd::vector&src);我该怎么办?在本地复制srcstd::vectorstd::vectortmp(src);并像这样将其用作源或设置指针,strm.next_in=const_cast(&

c++ - 为什么别名 int& 允许创建非函数类型 const (int&)?

通常在使用常量引用时会出现编译器错误,但在使用别名或使用模板时不会。为什么会这样?inta=5;usingmy_t=int&;my_tconstb=a;//#1OKint&constc=a;//#2Compilererror当运行最新的clang编译器(x86-64clang(实验性P1144))时,#1给我警告:[x86-64clang(experimentalP1144)#1]warning:'const'qualifieronreferencetype'my_t'(aka'int&')hasnoeffect[-Wignored-qualifiers]#2给出了错误:[x86-64

c++ - 将返回的迭代器转换为 const

我有以下for我的代码中的语句:for(autoIter=Target.begin(),IterEnd=std::stable_partition(Target.begin(),Target.end(),Check);Iter!=IterEnd;++Iter){/*loopstatement*/}重点是循环不会修改容器的元素,因此将迭代器声明为const_iterator是有意义的.我可以轻松解决第一次使用cbegin()的问题,但第二个更复杂。我不能申报cbegin()和cend()里面stable_partition,因为当然stable_partition需求nonconst_i

c++ - 在 C++ 中添加 const-ness

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Istheresomeninjatricktomakeavariableconstantafteritsdeclaration?考虑以下最小示例:voidMutateData(std::string&);intmain(){std::stringdata="somethingthatmakessensetohumans.";::MutateData(data);//Mutates'data'--e.g.,onlychangestheorderofthecharacters.//Atthispoint,'dat

c++ - 我的代码能否使用 'T' 或 'const T &' 特化,以可用者为准?

我们正在与一个内部图书馆合作,其中有一个StringBuilder用于转换VariableValue列表的类对象变成一个字符串。VariableValue对象可以从任意类型构造(通过专门化convertVariable模板函数)。这是描述场景的代码:structVariableValue{//Constructa'VariableValue'object,avarianttypewhichcanrepresentvaluesof//oneoffourtypes:string,number(integer),booleanandfloatingpoint.explicitVariable

C++和const reference to temporary binding问题(在C++0X中实现D语言传值传引用规则)

我想知道可以在多大程度上模仿C++中按值传递和按引用传递规则的D语言规则。有关背景,请参阅以下两个引用资料(主要是Alexandrescu):http://bartoszmilewski.wordpress.com/category/d-programming-language/page/2/和http://groups.google.com/group/comp.std.c++/msg/303e3bf2407a7609?其中一个关键区别是,在D中,const引用不绑定(bind)(作为非const引用)到临时对象。但是,我不知道有什么方法可以定义泛型类X,从而导致以下代码无法编译:v

C++ const 与 std::pair 的正确性

我正在维护一个容器类,其接口(interface)类似于std::map/std::unordered_map.接口(interface)声明存储std::pair(即value_type是什么)。然而,在内部,该实现存储了一个排序的std::pair数组。.当前的实现使用reinterpret_cast实现迭代器。我的问题是,是否有更好的选择?开始存储std::pair的数组不可能,因为实现需要复制数组中的元素来实现插入和删除。它执行此操作的方法之一是使用std::sort.编辑虽然我相信reinterpret_cast调用未定义的行为(或定义的实现?)我还没有遇到过这样不起作用的编

c++ - 具有 const 不可复制元素的元组

我需要创建一个std::tuple其中XYZ不可复制。这样的事情甚至可能吗?我当前的代码autotest()->std::tuple{returnstd::make_tuple(XYZ());}在VisualStudio2010中导致C2248...我发现这很可疑,因为我正在构建具有R值的元组,所以我假设移动构造会启动... 最佳答案 您的问题是该元素既不可复制又const.constXYZ元素表现为constXYZ成员;通过5.2.5p4访问constXYZxvalue上的元素将产生具有unioncv资格的xvalue,即具有有效