草庐IT

const_iterators

全部标签

c++ - 使用 const 参数的函数重载

函数重载可以发生在两个具有相同数量参数的成员函数之间,如果其中一个被声明为const。但是如果一个函数有一个常量参数,另一个函数有相同类型的非常量参数怎么办?它适用于引用和指针吗?如果C++提供它,它为什么提供?如果你知道请告诉我原因。下面是帮助您理解上述场景的示例。voidfun(constinti){cout输出:编译器错误:'voidfun(int)'的重新定义voidfun(char*a){cout输出:调用constfun()为什么在C++中允许使用第二个? 最佳答案 第一个的参数是顶级const。这意味着该函数无法更改参

c++ - 为什么通过 const 引用传递 constexpr 对象有效,但按值不编译

我有下面的代码,它基本上映射了一个std::integer_sequence进入std::array在编译时:#include#include#includetemplateconstexprautomake_array(conststd::integer_sequence¶m)//thisworks*///constexprautomake_array(std::integer_sequenceparam)//doesn'tcompile{returnstd::array{Is...};}intmain(){constexprstd::integer_sequenceiseq

c++ - 将对临时/匿名 lambda 的 const 引用传递给 std::thread 构造函数是否安全?

从这个问题开始:can-a-temperary-lambda-by-passed-by-reference?我有一个固定的代码片段://globalvariablestd::threadworker_thread;//Templatefunctiontemplatevoidstart_work(constFunctor&worker_fn)//lambdapassedbyconstref{worker_thread=std::thread([&](){worker_fn();});}这样调用:voiddo_work(intvalue){printf("Hellofromworker\r

c++ - 在 vs2008 SP1 中禁用检查迭代器时出现问题 (_HAS_ITERATOR_DEBUGGING=0)

当我尝试禁用已检查的迭代器时,在Debug模式下运行vs2008SP1时遇到了一些问题。以下程序重现了该问题(字符串析构函数崩溃):#define_HAS_ITERATOR_DEBUGGING0#includeintdo_stuff(std::stringconst&text){std::string::const_iteratori(text.end());return0;}intmain(){std::ostringstreamos;os我找到了similarpost在gamdev.net上讨论了在vs2005中遇到这个问题。该帖子中的示例程序在2008SP1上按原样为我编译-但是

c++ - 使用非 const 指针调用函数比使用指向 const 的指针的函数更像是一个模板函数

以下代码是在g++4.1.2和g++4.4.4上编译的。两者都给出了评论中注明的结果。intf(constint*a){return0;}templateintf(Aa){return1;}intmain(){intx;//returnf(&x);//returns1returnf((constint*)&x);//returns0}它似乎归结为调用f(int*)解析为f(int*)而不是预期的f(constint*).我发现这令人震惊并且完全不符合直觉。这是g++中的一个错误,C++的一个黑暗角落,还是由于某种原因我遗漏了?如果它不是错误,它背后的理论或逻辑是什么?关于这个问题有什么

c++ - const 数组类成员初始化

这个问题在这里已经有了答案:initializeaconstarrayinaclassinitializerinC++(10个答案)关闭2年前。如何初始化常量整型数组类成员?我认为在同样的情况下,经典数组不是最佳选择,我应该用什么来代替它?classGameInstance{enumSigns{NUM_SIGNS=3;};constintgameRulesTable[NUM_SIGNS][NUM_SIGNS];//howtoinitit?public:explicitGameInstance():gameRulesTable(){};};

c++ - 全局 const char* 上的错误 LNK1169

我在使用VisualStudio2010和C++时遇到了一些奇怪的行为。我有一个头文件,我在其中声明了一些全局常量#ifndefCONSTANTS_H#defineCONSTANTS_H#defineWIN32_LEAN_AND_MEAN//Macros...#defineSAFE_RELEASE(ptr){if(ptr){ptr->Release();ptr=NULL}}#defineSAFE_DELETE(ptr){if(ptr){deleteptr;ptr=NULL;}}//Constants...constchar*CLASS_NAME="WinMain";constcharG

c++ - const 参数 vs const 引用参数

实现1:foo(constBarx);实现2:foo(constBar&x);如果对象不会在函数内更改,为什么要复制它(实现1)。这会被编译器自动优化吗?总结:即使对象在函数声明中被声明为const,仍然有可能通过其他别名&.如果您是库的编写者并且知道您的函数不会那样做或者对象足够大以证明每次操作的取消引用成本是合理的,那么foo(constBar&x);是要走的路。第2部分:Willthisbeautomaticallyoptimizedbythecompiler?由于我们确定它们并不总是等价的,并且等价的条件很重要,因此编译器通常很难确保它们,所以几乎可以肯定没有

c++ - 从内部使用静态 std::string 的函数返回 const char * 是否安全?

我正在查看以下代码(简化)并问自己使用此returnMsg函数有多安全:#includeusingnamespacestd;constchar*returnMsg(constchar*msg){staticstd::stringmessage;message=msg;returnmessage.c_str();}intmain(intargc,char*argv[]){constchar*msg1=returnMsg("Helloworld");printf("msg1=%p\n",msg1);cout输出是:msg1=0x23a6028Helloworldmsg2=0x23a6028

c++ - 这是 C++ 中的一个缺陷,即 std::get<T> ( const std::pair<const T, U>& ) 由于 const T 而无法编译吗?

如题。此编译错误发生在使用std::get(pair)时,其中该对的第一个成员是一个常量,来自std::map的迭代器或std::unordered_map.要测试编译错误,请注释掉get的“notstd”重载.我已经在StackOverflow上用下面列出的三个最相关的问题研究了这个问题。现有的答案让我相信它应该是一个缺陷报告,相应的std::get应该将重载添加到标准库中,并且应该扩展应用于临时常量引用的自动生命周期扩展以涵盖此类情况。我也研究过它是否与布局特化有关(问题14272141,链接如下)。但是,我的代码片段只要求对两个成员之一的const引用;即使布局专门化,对任一成员