我正在考虑在我的C++代码中更多地使用纯/常量函数。(pure/constattributeinGCC)但是,我很好奇我应该对它有多严格,什么可能会破坏。最明显的情况是调试输出(以任何形式,可以在cout、某个文件或某个自定义调试类中)。我可能会有很多功能,尽管有这种调试输出,但它们没有任何副作用。无论是否生成调试输出,这绝对不会影响我的应用程序的其余部分。或者我正在考虑的另一种情况是使用一些SmartPointer类,当处于Debug模式时,它可能会在全局内存中做一些额外的事情。如果我在纯/常量函数中使用这样的对象,它确实有一些轻微的副作用(从某种意义上说,一些内存可能会有所不同)但
我正在考虑在我的C++代码中更多地使用纯/常量函数。(pure/constattributeinGCC)但是,我很好奇我应该对它有多严格,什么可能会破坏。最明显的情况是调试输出(以任何形式,可以在cout、某个文件或某个自定义调试类中)。我可能会有很多功能,尽管有这种调试输出,但它们没有任何副作用。无论是否生成调试输出,这绝对不会影响我的应用程序的其余部分。或者我正在考虑的另一种情况是使用一些SmartPointer类,当处于Debug模式时,它可能会在全局内存中做一些额外的事情。如果我在纯/常量函数中使用这样的对象,它确实有一些轻微的副作用(从某种意义上说,一些内存可能会有所不同)但
我有一个类,我想存储一个静态std::string,它要么是真正的const,要么是通过getter有效的const。我尝试了几种直接的方法1.conststaticstd::stringfoo="bar";2.constexternstd::stringfoo;//definedatthebottomoftheheaderlikeso...//remainingcodeinheader};//closeheaderclassdeclarationstd::stringMyClass::foo="bar"/#endif//MYCLASS_H我也试过了3.protected:static
我有一个类,我想存储一个静态std::string,它要么是真正的const,要么是通过getter有效的const。我尝试了几种直接的方法1.conststaticstd::stringfoo="bar";2.constexternstd::stringfoo;//definedatthebottomoftheheaderlikeso...//remainingcodeinheader};//closeheaderclassdeclarationstd::stringMyClass::foo="bar"/#endif//MYCLASS_H我也试过了3.protected:static
我在我工作的项目中看到了这个结构:constenumSomeEnum{val0,val1,val2};这里const的作用是什么? 最佳答案 什么都没有。实际上,根据G++,这是一个编译器错误:error:qualifierscanonlybespecifiedforobjectsandfunctions但是,在C中它是允许的,但没有用。GCC说:warning:uselesstypequalifierinemptydeclaration问题在于const仅适用于对象(变量)和成员函数,而不适用于基本类型。
我在我工作的项目中看到了这个结构:constenumSomeEnum{val0,val1,val2};这里const的作用是什么? 最佳答案 什么都没有。实际上,根据G++,这是一个编译器错误:error:qualifierscanonlybespecifiedforobjectsandfunctions但是,在C中它是允许的,但没有用。GCC说:warning:uselesstypequalifierinemptydeclaration问题在于const仅适用于对象(变量)和成员函数,而不适用于基本类型。
我需要一种方法来为我当前正在处理的程序初始化数组的const元素。问题是我必须用一个函数来初始化这些元素,没有办法这样做:constintarray[255]={1,1278632,188,...};因为我必须生成大量数据。我尝试将memcpy数据保存到constint中,但这不起作用,也没有起作用。constintarray[255];voidgenerateData(){for(inti=0;i我希望你明白我在尝试什么,对不起,如果我重复了这个问题,我一定忽略了它。 最佳答案 这个怎么样?#includetypedefstd::
我需要一种方法来为我当前正在处理的程序初始化数组的const元素。问题是我必须用一个函数来初始化这些元素,没有办法这样做:constintarray[255]={1,1278632,188,...};因为我必须生成大量数据。我尝试将memcpy数据保存到constint中,但这不起作用,也没有起作用。constintarray[255];voidgenerateData(){for(inti=0;i我希望你明白我在尝试什么,对不起,如果我重复了这个问题,我一定忽略了它。 最佳答案 这个怎么样?#includetypedefstd::
classFoo{intBar;public:int&GetBar()const{returnBar;}}GetBar是const方法可以吗?它实际上并没有改变任何东西,但它为“外部世界”提供了一种改变它的方法。 最佳答案 您的代码中有错字,这可能是您的意思:classFoo{intBar;public:int&GetBar()const{returnBar;//Removedtheampersand,becauseareferenceisreturned,notanaddress}}不,这是不合法的。当用const标记方法时,你不
classFoo{intBar;public:int&GetBar()const{returnBar;}}GetBar是const方法可以吗?它实际上并没有改变任何东西,但它为“外部世界”提供了一种改变它的方法。 最佳答案 您的代码中有错字,这可能是您的意思:classFoo{intBar;public:int&GetBar()const{returnBar;//Removedtheampersand,becauseareferenceisreturned,notanaddress}}不,这是不合法的。当用const标记方法时,你不