草庐IT

constness

全部标签

C++ 0x lambda按值捕获总是const?

有什么方法可以按值捕获,并使捕获的值非常量?我有一个库仿函数,我想捕获并调用一个非常量但应该是的方法。以下内容无法编译,但将foo::operator()const修复。structfoo{booloperator()(constbool&a){returna;}};int_tmain(intargc,_TCHAR*argv[]){fooafoo;autobar=[=]()->bool{afoo(true);};return0;} 最佳答案 使用可变的。autobar=[=]()mutable->bool....如果没有mutabl

c++ - 为什么 libc++ 的 vector<bool>::const_reference 不是 bool?

第23.3.7节类vector[vector.bool],第1段指出:templateclassvector{public://types:typedefboolconst_reference;...但是这个程序在使用libc++时编译失败:#include#includeintmain(){static_assert(std::is_same::const_reference,bool>{},"?");}此外,我注意到C++标准在本规范中一直保持一致,直至C++98。我进一步指出,自libc++首次引入以来,libc++一直没有遵循此规范。这种不符合项的动机是什么?

c++ - 如何可移植地调用在某些平台上采用 char** 而在其他平台上采用 const char** 的 C++ 函数?

在我的Linux(和OSX)机器上,iconv()函数有这个原型(prototype):size_ticonv(iconv_t,char**inbuf...在FreeBSD上看起来像这样:size_ticonv(iconv_t,constchar**inbuf...我希望我的C++代码可以在两个平台上构建。对于C编译器,为constchar**参数传递char**(反之亦然)通常只会发出警告;但是在C++中,这是一个fatalerror。所以如果我传递一个char**,它不会在BSD上编译,如果我传递一个constchar**它不会在Linux/OSX上编译.我怎样才能编写在两者上都编

c++ - 如何在类中初始化 const 成员变量?

#includeusingnamespacestd;classT1{constintt=100;public:T1(){cout当我尝试用100初始化const成员变量t时。但它给了我以下错误:test.cpp:21:error:ISOC++forbidsinitializationofmember‘t’test.cpp:21:error:making‘t’static如何初始化const值? 最佳答案 const变量指定变量是否可修改。每次引用变量时都将使用分配的常量值。在程序执行期间不能修改分配的值。BjarneStroustr

c++ - 为什么 C++ 需要用户提供的默认构造函数来默认构造 const 对象?

C++标准(第8.5节)说:Ifaprogramcallsforthedefaultinitializationofanobjectofaconst-qualifiedtypeT,Tshallbeaclasstypewithauser-provideddefaultconstructor.为什么?我想不出在这种情况下为什么需要用户提供的构造函数。structB{B():x(42){}intdoSomeStuff()const{returnx;}intx;};structA{A(){}//otherthan"becausethestandardsaysso",whyisthisliner

c++ - `const char * const` 与 `const char *` ?

我正在运行一些示例程序以重新熟悉C++,我遇到了以下问题。首先,这里是示例代码:voidprint_string(constchar*the_string){cout在上面的代码中,print_string的参数可以改为constchar*constthe_string。哪个更正确?我知道区别在于一个是指向常量字符的指针,而另一个是指向常量字符的常量指针。但为什么这两种方法都有效?什么时候相关? 最佳答案 后者阻止您修改print_string内的the_string。在这里实际上是合适的,但可能是冗长推迟了开发人员。char*th

C++ 映射访问丢弃限定符 (const)

以下代码表明将映射作为const传递给operator[]方法会丢弃限定符:#include#include#includeusingnamespacestd;classMapWrapper{public:constint&get_value(constint&key)const{return_map[key];}private:map_map;};intmain(){MapWrappermw;cout这是因为map访问时可能发生的分配吗?不能将具有映射访问权限的函数声明为const吗?MapWrapper.cpp:10:error:passingconststd::map,std::

c++ - const char* 连接

我需要像这样连接两个const字符:constchar*one="Hello";constchar*two="World";我该怎么做呢?我是从具有C接口(interface)的第三方库传递这些char*的,因此我不能简单地使用std::string来代替。 最佳答案 在您的示例中one和two是char指针,指向char常量。您不能更改这些指针指向的char常量。所以像:strcat(one,two);//appendstringtwotostringone.不会工作。相反,您应该有一个单独的变量(char数组)来保存结果。像这样

c++ - 'const int' 与 'int const' 作为 C++ 和 C 中的函数参数

考虑:inttestfunc1(constinta){returna;}inttestfunc2(intconsta){returna;}这两个功能是各方面都一样还是有区别?我对C语言的答案很感兴趣,但如果C++语言中有什么有趣的东西,我也想知道。 最佳答案 诀窍是向后阅读声明(从右到左):constinta=1;//readas"aisanintegerwhichisconstant"intconsta=1;//readas"aisaconstantinteger"两者都是一样的。因此:a=2;//Can'tdobecauseai

c++ - 按 const 值返回的目的?

这个问题在这里已经有了答案:Whataretheusecasesforhavingafunctionreturnbyconstvaluefornon-builtintype?(4个回答)关闭8年前。这个const的目的是什么?constObjectmyFunc(){returnmyObject;}我刚开始阅读EffectiveC++,第3条提倡​​这一点,谷歌搜索会找到类似的建议,但也有反例。我看不出在这里使用const会更好。假设按值返回是可取的,我认为没有任何理由保护返回的值。给出的示例说明为什么这可能会有所帮助,以防止对返回值进行意外的bool强制转换。那么实际的问题是应该使用显