草庐IT

const_buffers

全部标签

c++ - 遵循函数/方法签名的 const 是什么意思?

这个问题在这里已经有了答案:Meaningof'const'lastinafunctiondeclarationofaclass?(12个回答)关闭5年前。根据MSDN:“当跟随成员函数的参数列表时,const关键字指定该函数不会修改调用它的对象。”有人可以澄清一下吗?这是否意味着该函数不能修改任何对象的成员?boolAnalogClockPlugin::isInitialized()const{returninitialized;} 最佳答案 表示该方法不修改成员变量(声明为mutable的成员除外),因此可以在类的常量实例上调用

c++ - 当按值传递比通过 const 引用传递时的经验法则?

假设我有一个接受T类型参数的函数。它不会改变它,所以我可以选择通过const引用constT&或值T传递它:voidfoo(Tt){...}voidfoo(constT&t){...}在通过const引用传递比通过值传递便宜之前,T应该变成多大的经验法则?例如,假设我知道sizeof(T)==24。我应该使用const引用还是值?我假设T的复制构造函数是微不足道的。否则,问题的答案当然取决于复制构造函数的复杂性。我已经寻找过类似的问题,偶然发现了这个问题:templatepassbyvalueorconstreferenceor...?但是,接受的答案(https://stackove

c++ - 当按值传递比通过 const 引用传递时的经验法则?

假设我有一个接受T类型参数的函数。它不会改变它,所以我可以选择通过const引用constT&或值T传递它:voidfoo(Tt){...}voidfoo(constT&t){...}在通过const引用传递比通过值传递便宜之前,T应该变成多大的经验法则?例如,假设我知道sizeof(T)==24。我应该使用const引用还是值?我假设T的复制构造函数是微不足道的。否则,问题的答案当然取决于复制构造函数的复杂性。我已经寻找过类似的问题,偶然发现了这个问题:templatepassbyvalueorconstreferenceor...?但是,接受的答案(https://stackove

c++ - 我应该将 const 用于局部变量以进行更好的代码优化吗?

对于没有被修改的局部变量,我经常使用const,像这样:constfloatheight=person.getHeight();我认为它可以使编译后的代码可能更快,允许编译器进行更多优化。还是我错了,编译器可以自己弄清楚局部变量永远不会被修改? 最佳答案 OramIwrong,andcompilerscanfigureoutbythemselvesthatthelocalvariableisnevermodified?大多数编译器都很聪明,可以自己解决这个问题。您应该使用const来确保const-correctness而不是微优化

c++ - 我应该将 const 用于局部变量以进行更好的代码优化吗?

对于没有被修改的局部变量,我经常使用const,像这样:constfloatheight=person.getHeight();我认为它可以使编译后的代码可能更快,允许编译器进行更多优化。还是我错了,编译器可以自己弄清楚局部变量永远不会被修改? 最佳答案 OramIwrong,andcompilerscanfigureoutbythemselvesthatthelocalvariableisnevermodified?大多数编译器都很聪明,可以自己解决这个问题。您应该使用const来确保const-correctness而不是微优化

C++ "const"关键字解释

在阅读用C++编写的教程和代码时,我经常会偶然发现const关键字。我看到它是这样使用的:constintx=5;我知道这意味着x是一个常量变量,可能存储在只读内存中。但是什么是voidmyfunc(constcharx);和intmyfunc()const;? 最佳答案 voidmyfunc(constcharx);这意味着参数x是一个char,它的值不能在函数内部改变。例如:voidmyfunc(constcharx){chary=x;//OKx=y;//failure-xis`const`}最后一个:intmyfunc()co

C++ "const"关键字解释

在阅读用C++编写的教程和代码时,我经常会偶然发现const关键字。我看到它是这样使用的:constintx=5;我知道这意味着x是一个常量变量,可能存储在只读内存中。但是什么是voidmyfunc(constcharx);和intmyfunc()const;? 最佳答案 voidmyfunc(constcharx);这意味着参数x是一个char,它的值不能在函数内部改变。例如:voidmyfunc(constcharx){chary=x;//OKx=y;//failure-xis`const`}最后一个:intmyfunc()co

c++ - 为什么不总是将返回值分配给 const 引用?

假设我有一些功能:FooGetFoo(..){...}假设我们既不知道这个函数是如何实现的,也不知道Foo的内部结构(例如,它可能是非常复杂的对象)。但是我们确实知道该函数按值返回Foo,并且我们希望将此返回值用作const。问题:将此函数的返回值存储为const&总是一个好主意吗?constFoo&f=GetFoo(...);而不是,constFoof=GetFoo(...);我知道编译器会做返回值优化,并且可能会移动对象而不是复制它,所以最后const&可能没有任何优势。但是我的问题是,有什么缺点吗?鉴于我不必依赖编译器优化以及即使移动复杂对象的操作可能很昂贵。把这个延伸到极端,为

c++ - 为什么不总是将返回值分配给 const 引用?

假设我有一些功能:FooGetFoo(..){...}假设我们既不知道这个函数是如何实现的,也不知道Foo的内部结构(例如,它可能是非常复杂的对象)。但是我们确实知道该函数按值返回Foo,并且我们希望将此返回值用作const。问题:将此函数的返回值存储为const&总是一个好主意吗?constFoo&f=GetFoo(...);而不是,constFoof=GetFoo(...);我知道编译器会做返回值优化,并且可能会移动对象而不是复制它,所以最后const&可能没有任何优势。但是我的问题是,有什么缺点吗?鉴于我不必依赖编译器优化以及即使移动复杂对象的操作可能很昂贵。把这个延伸到极端,为

c++ - const 成员和赋值运算符。如何避免未定义的行为?

我answered关于std::vectorofobjectsandconst-correctness的问题,并收到有关未定义行为的评论。我不同意,因此我有一个问题。考虑具有const成员的类:classA{public:constintc;//mustnotbemodified!A(intc):c(c){}A(constA©):c(copy.c){}//Noassignmentoperator};我想要一个赋值运算符,但我不想使用const_cast,就像答案之一中的以下代码一样:A&operator=(constA&assign){*const_cast(&c)=assig