草庐IT

Constants

全部标签

c++ - 由于 C++03/C++11 中指针数组的常量性而导致的链接错误

此问题在-std=c++14之前的g++中可重现。由于以下代码中突出显示的const会生成链接错误。如果删除RHSconst,它就会消失。/*main.cpp*/constchar*constarr[2]={"Hello","World"};//^^^^^intmain(){}和/*foo.cpp*/externconstchar*constarr[2];//^^^^^constchar*foo(){returnarr[0];}编译时:g++[-std=c++11]main.cppfoo.cpp,出现以下链接错误:Infunction`foo()':undefinedreference

c++ - const ref lvalue to non-const func return value 是否专门减少拷贝?

我遇到了一个C++习惯,我试图研究它以了解它的影响并验证它的用法。但我似乎找不到确切的答案。std::vectorgetThings();voiddo(){conststd::vector&things=getThings();}这里我们有一些返回非const&值的函数。我看到的习惯是在分配函数的返回值时使用const&左值。提出这个习惯的原因是它减少了拷贝。现在我一直在研究RVO(返回值优化)、复制省略和C++11移动语义。我意识到给定的编译器可以选择阻止通过RVO进行复制,不管这里是否使用了const&。但是,在防止复制方面,const&左值的使用对非const&返回值有任何影响吗

c++ - header 中的 private static const 成员变量与 cpp 中的 const 变量

为什么我应该在header中声明一个私有(private)的staticconst变量(并在cpp中初始化它)而不是仅仅在cpp中定义+声明它?即案例1.hclassMyClass{...private:staticconstMyTypesome_constant;}case1.cppconstMyTypeMyClass::some_constant=...;案例2.h//Nomentionofsome_constantatall案例2.cppconstMyTypesome_constant=...;假设遵循常见的c++约定(1个header和cpp仅与1个类相关联,从不与#inclu

c++ - 转发模板参数的常量性,我应该使用转发引用吗?

我想编写一个函数foo,它应该调用其参数的operator(),如下面的(损坏的)代码所示:templatevoidfoo(constT&x){x();}structMyFunctor{intdata;voidoperator()(){/*stuffthatmightmodifythedata*/}};intmain(){foo(MyFunctor{});}显然代码不起作用,因为operator()是非const,但是foo()要求它的参数是常量。作为模板函数,foo()应该与const和非const仿函数一起工作,并且对不挑剔code>const-它的参数。如果我通过将const更改

c++ - 无法将左值绑定(bind)到 A<Cv2>&&

我认为通用引用(T&&)应该采用任何类型的引用。但以下内容不起作用。当我尝试在我正在编写的库中保持const-correct时,我遇到了这个问题。我是C++的新手,以前从未见过这样的东西。测试.cpp:enumCv_qualifier{constant,non_const};templateclassA;templateclassA{public:templatevoidt(constA&&out){}};templateclassA{public:templatevoidt(constA&&out){}};intmain(){Aa;Ab;a.t(b);}错误(使用g++test.cp

c++ - 使 C++ 变量成为 const

我喜欢“const”。我希望每个“应该是常量”的变量和方法都是“常量”。问题是变量或方法是否“应该是常量”取决于调用树中更下方的方法/变量。是否有某种工具或某种过程可用于静态检查代码体并执行“自下而上的常量化”? 最佳答案 我不知道你问题的答案,但我想反驳这种说法whetheravariableormethod"oughttobeconst"dependsonmethods/variablesfurtherdowninthecalltree其实const应该是逻辑层面的。IE。如果逻辑上不应更改,则应将其标记为const。如果稍后是

使用 decltype 和 constness 的 C++11 尾随返回成员函数

我正在尝试使用decltype理解C++11中基于尾随返回的新函数声明语法。在下面的代码中,我尝试定义一个返回const&的成员函数,以允许对i进行只读访问#include#includestructX{int&i;X(int&ii):i(ii){}//autoacc()const->std::add_const::type{returni;}//failstheconstnesstestautoacc()const->decltype(i){returni;}//failstheconstnesstest//constint&acc()const{returni;}//worksas

c++ - 如何跨指针保持 const 正确性?

我正在尝试对真正为const的类进行const操作-它不会更改该类指向的数据。例如:classNode{public:intval;};classV{public:Node*node;//whatisthechangethatisneededhere?voidconst_action()const{node->val=5;//errorwantedhere}voidaction(){node->val=5;//errorisnotwantedhere}}; 最佳答案 您可以使用模板在指针上强制执行const正确性,而无需更改类的含义

c++ - (&const_object) 可以评估为临时地址

我曾与一位程序员讨论过,其要点是foo中的以下断言可以通过或不通过,具体取决于编译器。#includeconstinti=0;voidfoo(constint&i){assert(&::i==&i);}intmain(){foo(i);}他告诉我,(&i)表达式可以计算为某个临时对象的地址。因为我有疑问,所以我在这里。如何将对temp的引用传递给函数,如果在函数中我可以检查并使用i和参数的地址做任何我想做的事情,并且必须保留预期的语义。?例如#includeconstinti=0;boolfunc(constint&i){return&::i==&i;}intmain(){consti

c++ - 如何在编译时检查内联函数的参数是否已知?

我有一个性能关键的内联函数。它根据参数生成一些数据。我希望编译器优化所有调用的数据生成,其中参数在编译时是已知的。问题是我不能强制编译器将优化后的数据从堆栈中放入静态常量,因为标记数据static会在参数不是编译时常量时打破这种情况.堆栈中的常量数据会损害性能。有没有办法推断(可能使用模板/boost::enable_if)参数是编译时常量并选择适当的数据生成实现?澄清基本上我有如下内容:structData{intd_[16];};inlineDatafun(intparam){//paramcansometimesbeacompile-timeconstant...//genera