我很少看到decltype(auto),但是当我看到它时,我会感到困惑,因为它似乎在从函数返回时与auto做同样的事情。autog(){returnexpr;}decltype(auto)g(){returnexpr;}这两种语法有什么区别? 最佳答案 auto遵循模板参数推导规则,始终为对象类型;decltype(auto)遵循decltype规则,根据值类别推导引用类型。所以如果我们有intx;int&&f();然后expressionautodecltype(auto)-----------------------------
当我使用auto推导指针类型时,我发现了一个奇怪的现象。我的代码是这样的:#includeusingnamespacestd;intmain(){inti=100;autop1=&i;auto*p2=&i;cout编译执行后,我们可以发现*p1和*p2的结果是一样的,都是100。也就是说p1和p2都是指向int对象的指针对象。[user@host~]$./test100100这两个定义p1和p2的语句有什么区别吗? 最佳答案 不同的是,第一种情况下auto被推导为int*,而第二种情况下auto被推导为int,这导致两个p1和p2的
如果非静态数据成员在声明中被初始化,C++11是否允许将非静态数据成员声明为“自动”?例如:structS{autox=5;//inplaceof'intx=5;',whichisdefinitelyallowed};GCC4.7拒绝上述代码,而接受intx=5;.假设这不是编译器错误,而是标准确实不允许,为什么不呢?它与声明局部变量auto一样有用。 最佳答案 禁止非静态成员的规则在7.1.6.4第4条:Theautotype-specifiercanalsobeusedindeclaringavariableinthecondi
在C++11中,我可以像这样迭代一些容器:for(autoi:vec){std::cout但我知道这是不必要的-不必要,因为我只需要打印vec的值-复制(EDIT:vec的每个元素,所以我可以这样做:for(auto&i:vec){std::cout但我想确保vec的值永远不会被修改并遵守const-correctness,所以我可以这样做:for(constauto&i:vec){std::cout所以我的问题是:如果我只需要查看某个容器的值,那么最后一个循环(constauto&i)是否总是首选由于没有额外的(EDIT:eachelementof)vec?拷贝提高了效率我正在开发一
我找到了代码here看起来像这样:autof(T&t,size_tn)->decltype(t.reserve(n),void()){..}在我阅读的所有文档中,我被告知decltype的签名为:decltype(entity)或decltype(expression)而且任何地方都没有第二个参数。至少这是在cppreference上指出的。.这是decltype的第二个参数吗?如果是这样,它有什么作用? 最佳答案 既然是一个表达式,逗号只是逗号操作符(意味着类型是rhs侧的类型:void),而不是另一个参数。该代码正在使用SFIN
autoconst和constauto之间是否存在语义差异,或者它们的意思是一样的? 最佳答案 const限定符适用于紧靠左边的类型,除非左边没有任何东西,然后它适用于紧靠右边的类型。所以是的,它是一样的。 关于c++-'autoconst'和'constauto'是一样的吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/10709897/
我喜欢C++11中的auto。太棒了。但是它有一个不一致的地方真的让我很紧张,因为我总是绊倒它:inti=3;//iisanintwithvalue3inti=int{3};//iisanintwithvalue3inti(3);//iisanintwithvalue3(possiblynarrowing,notinthiscase)inti{3};//iisanintwithvalue3autoi=3;//iisanintwithvalue3autoi=int{3};//iisanintwithvalue3autoi(3);//iisanintwithvalue3autoi{3};/
当我使用C++11auto时,关于解析为值还是引用,类型推导的规则是什么?例如,有时很清楚:autoi=v.begin();//Copy,begin()returnsaniteratorbyvalue这些不太清楚:conststd::shared_ptr&get_foo();autop=get_foo();//Copyorreference?staticstd::shared_ptrs_foo;autosp=s_foo;//Copyorreference?std::vector>c;for(autofoo:c){//Copyforeveryloopiteration?
如何知道编译器在使用auto关键字时推断出的类型是什么?示例1:更简单autotickTime=0.001;这是推导出为float还是double?示例2:更复杂(以及我目前的头痛):typedefstd::ratiosec;std::chrono::durationtimePerTick2{0.001};autonextTickTime=std::chrono::high_resolution_clock::now()+timePerTick2;nextTickTime是什么类型?我遇到的问题是当我尝试将nextTickTime发送到std::cout时。我收到以下错误:./main
我认为这个问题已经很清楚了。auto关键字会自动检测const-ness,还是总是返回非const类型,即使有例如。函数的两个版本(一个返回const而另一个不返回)。为了记录,我确实在我的for循环之前使用了constautoend=some_container.end(),但我不知道这是否有必要甚至与普通自动。 最佳答案 constautox=expr;不同于autox=expr;作为constXx=expr;不同于Xx=expr;所以要经常使用constauto和constauto&,就像没有auto时一样。重载解析不受返回类