我知道,对于C++和Java,这是一个完善的命名约定,常量应该全部大写,用下划线分隔单词。像这样(Java示例):publicfinalstaticColorBACKGROUND_COLOR=Color.WHITE;publicfinalstaticColorTEXT_COLOR=Color.BLACK;这个命名约定很容易理解和遵循,但我问自己,为什么选择这个命名约定而不是变量的正常命名约定:publicfinalstaticColorbackgroundColor=COLOR.WHITE;publicfinalstaticColortextColor=COLOR.BLACK;似乎没有
对于没有被修改的局部变量,我经常使用const,像这样:constfloatheight=person.getHeight();我认为它可以使编译后的代码可能更快,允许编译器进行更多优化。还是我错了,编译器可以自己弄清楚局部变量永远不会被修改? 最佳答案 OramIwrong,andcompilerscanfigureoutbythemselvesthatthelocalvariableisnevermodified?大多数编译器都很聪明,可以自己解决这个问题。您应该使用const来确保const-correctness而不是微优化
对于没有被修改的局部变量,我经常使用const,像这样:constfloatheight=person.getHeight();我认为它可以使编译后的代码可能更快,允许编译器进行更多优化。还是我错了,编译器可以自己弄清楚局部变量永远不会被修改? 最佳答案 OramIwrong,andcompilerscanfigureoutbythemselvesthatthelocalvariableisnevermodified?大多数编译器都很聪明,可以自己解决这个问题。您应该使用const来确保const-correctness而不是微优化
在阅读用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关键字。我看到它是这样使用的:constintx=5;我知道这意味着x是一个常量变量,可能存储在只读内存中。但是什么是voidmyfunc(constcharx);和intmyfunc()const;? 最佳答案 voidmyfunc(constcharx);这意味着参数x是一个char,它的值不能在函数内部改变。例如:voidmyfunc(constcharx){chary=x;//OKx=y;//failure-xis`const`}最后一个:intmyfunc()co
我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
我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
对于定义如下整数类型的编译时常量(在函数和类范围内),哪种语法最好?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
对于定义如下整数类型的编译时常量(在函数和类范围内),哪种语法最好?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++中创建一个返回以下场景中的指针的成员函数:1.返回的指针是常量,但是里面的垃圾是可以修改的。2.里面的垃圾是常量,但是返回的指针可以修改。3.垃圾和指针都不能修改。是这样吗:int*constfunc()constconstint*func()constconstint*constfunc()const我读过的所有教程都没有涵盖这种区别。旁注:如果我的方法被声明为const,那么教程会说我不会修改参数。但是在参数是指针的情况下,这对我来说还不够清楚。我的参数是否需要像:一个。voidfunc(constint*constx)const;