关于对象(尤其是字符串),按引用调用比按值调用更快,因为函数调用不需要创建原始对象的拷贝。使用const,还可以确保引用不被滥用。我的问题是,如果使用bool、int或double等原始类型,const按引用调用是否也更快。voiddoSomething(conststring&strInput,unsignedintiMode);voiddoSomething(conststring&strInput,constunsignedint&iMode);我的怀疑是,一旦原始类型的字节大小超过地址值的大小,就使用按引用调用是有利的。即使差异很小,我也想利用,因为我经常调用其中一些函数。
我最近读了一篇很酷的文章:https://akrzemi1.wordpress.com/2015/08/20/can-you-see-the-bug/在ideone上玩简化版时,我得到了令人惊讶的行为:#include#includeusingnamespacestd;intmain(){constsize_tsz=258;strings{sz,'#'};assert(2==s.size());}不编译,但是删除const的相同程序编译:#include#includeusingnamespacestd;intmain(){size_tsz=258;strings{sz,'#'};as
我正在尝试为不可复制、不可移动的类制作一个可移动的包装器,但是我在将conststd::string变量传递给构造函数时遇到问题。下面的最小示例会产生以下错误:#include#include#include#includestructX{std::stringx;X(conststd::string&x):x(x){}X(constX&x)=delete;X(X&&x)=delete;};structWrapper{std::unique_ptrx;Wrapper(constWrapper&wrapper)=delete;Wrapper(Wrapper&&wrapper)=defau
我想通过typedefconstAB;将const添加到引用类型。不知何故它不起作用。这在C++中是不可能的吗?测试:#includetypedefint&A;typedefconstAB;//::typeB;//alsodoesn'twork.static_assert(std::is_const::type>::value,"isconst");intmain(){return0;}编译错误:add2.cpp:5:1:error:staticassertionfailed:isconststatic_assert(std::is_const 最佳答案
为了避免可变的容器/状态,我目前想知道什么是最接近从某些输入构建constSTL容器的东西,例如constvectorinput={2,13,7,1};我想做的是这样的:constautotransformed=generate_from>(input.begin(),input.end(),to_string);do_something(transformed);虽然您发现最多的方法是创建一个可变对象并对其进行修改(我想避免这种情况):vectorbad_mutable_container;for(constauto&elem:input){bad_mutable_container
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭3年前。Improvethisquestion假设我正在做一个涉及创建一个我不会修改的临时对象的计算:autotmp=val*val;//Dosomecalculationswithtmp...此外,我不需要tmp是一个左值,因为我不会获取它的地址。在这些情况下,我应该在我的代码中使用哪种习语:1.autotmp=val*val;2.constautotmp=val*val;3.constauto&tmp=val*val;4.auto
我的类中有几个成员是const,因此只能通过初始化列表进行初始化,如下所示:classMyItemT{public:MyItemT(constMyPacketT&aMyPacket,constMyInfoT&aMyInfo):mMyPacket(aMyPacket),mMyInfo(aMyInfo){}private:constMyPacketTmMyPacket;constMyInfoTmMyInfo;};我的类可以用在我们内部定义的一些容器类(例如vector)中,这些容器需要在类中定义operator=。当然,我的operator=需要做这样的事情:MyItemT&MyItemT
我刚刚在工作中构建我们的一个项目,我看到添加了一个新功能:conststd::string&ClassName::MethodName()const{return"";}编译器给出警告:WarningC4172:returningaddressoflocalvariableortemporary我认为编译器是对的。这个函数的安全性如何?请注意,该函数不会返回constchar*,这没有问题,因为字符串文字具有静态存储持续时间。它返回对conststd::string的引用 最佳答案 是的,它不安全。返回局部变量或临时变量的地址并取消
我明白了char*s="HelloWorld!";存储在只读内存中,不能通过指针修改字符串文字。这和有什么不同constchar*s="HelloWorld!";另外'string'的类型是char*还是constchar*? 最佳答案 区别在于后者合法,前者不合法。这是在C++11中所做的更改。形式上,"HelloWorld!"的类型为constchar[13];它可以转换为constchar*。在过去,它的类型可能是char[13],可以转换为char*。C++通过添加const更改了数组的类型,但保留了对char*的转换,以便
正如此处讨论的那样WhichmemoryareaisaconstobjectininC++?,编译器在编译代码时可能不会为常量分配任何存储,它们可能会直接嵌入到机器代码中。那么编译器如何获取常量的地址呢?C++代码:voidf(){constinta=99;constint*p=&a;printf("constant'svalue:%d\n",*p);} 最佳答案 一个常量是否会被分配任何存储空间完全取决于编译器。允许编译器根据As-If执行优化规则,只要程序的可观察行为没有改变,编译器可能会为a分配存储空间,也可能不会。请注意,标