草庐IT

constness

全部标签

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

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

c++ - constexpr 与静态 const : Which one to prefer?

对于定义如下整数类型的编译时常量(在函数和类范围内),哪种语法最好?staticconstintkMagic=64;//(1)constexprintkMagic=64;//(2)(1)也适用于C++98/03编译器,而(2)至少需要C++11。两者之间还有其他区别吗?在现代C++代码中应该首选其中一个吗?为什么?编辑我用Godbolt'sCE尝试了这个示例代码:intmain(){#defineUSE_STATIC_CONST#ifdefUSE_STATIC_CONSTstaticconstintkOk=0;staticconstintkError=1;#elseconstexpri

c++ - constexpr 与静态 const : Which one to prefer?

对于定义如下整数类型的编译时常量(在函数和类范围内),哪种语法最好?staticconstintkMagic=64;//(1)constexprintkMagic=64;//(2)(1)也适用于C++98/03编译器,而(2)至少需要C++11。两者之间还有其他区别吗?在现代C++代码中应该首选其中一个吗?为什么?编辑我用Godbolt'sCE尝试了这个示例代码:intmain(){#defineUSE_STATIC_CONST#ifdefUSE_STATIC_CONSTstaticconstintkOk=0;staticconstintkError=1;#elseconstexpri