草庐IT

Auto-Indent

全部标签

c++ - 在 C++11 中使用 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 - 将非静态数据成员声明为 'auto'

如果非静态数据成员在声明中被初始化,C++11是否允许将非静态数据成员声明为“自动”?例如:structS{autox=5;//inplaceof'intx=5;',whichisdefinitelyallowed};GCC4.7拒绝上述代码,而接受intx=5;.假设这不是编译器错误,而是标准确实不允许,为什么不呢?它与声明局部变量auto一样有用。 最佳答案 禁止非静态成员的规则在7.1.6.4第4条:Theautotype-specifiercanalsobeusedindeclaringavariableinthecondi

C++11 基于范围的 for 循环效率 "const auto &i"与 "auto i"

在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?拷贝提高了效率我正在开发一

c++ - 'void()' 中的 'auto f(params) -> decltype(..., void())' 有什么作用?

我找到了代码here看起来像这样:autof(T&t,size_tn)->decltype(t.reserve(n),void()){..}在我阅读的所有文档中,我被告知decltype的签名为:decltype(entity)或decltype(expression)而且任何地方都没有第二个参数。至少这是在cppreference上指出的。.这是decltype的第二个参数吗?如果是这样,它有什么作用? 最佳答案 既然是一个表达式,逗号只是逗号操作符(意味着类型是rhs侧的类型:void),而不是另一个参数。该代码正在使用SFIN

c++ - 'auto const' 和 'const auto' 是一样的吗?

autoconst和constauto之间是否存在语义差异,或者它们的意思是一样的? 最佳答案 const限定符适用于紧靠左边的类型,除非左边没有任何东西,然后它适用于紧靠右边的类型。所以是的,它是一样的。 关于c++-'autoconst'和'constauto'是一样的吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/10709897/

c++ - 为什么 auto x{3} 会推导出一个 initializer_list?

我喜欢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++11 "auto"语义

当我使用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?

c++ - 使用 'auto' 类型推导 - 如何找出编译器推导的类型?

如何知道编译器在使用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

c++ - `const auto` 有什么意义吗?

我认为这个问题已经很清楚了。auto关键字会自动检测const-ness,还是总是返回非const类型,即使有例如。函数的两个版本(一个返回const而另一个不返回)。为了记录,我确实在我的for循环之前使用了constautoend=some_container.end(),但我不知道这是否有必要甚至与普通自动。 最佳答案 constautox=expr;不同于autox=expr;作为constXx=expr;不同于Xx=expr;所以要经常使用constauto和constauto&,就像没有auto时一样。重载解析不受返回类

c++ - 不推荐使用 auto_ptr 吗?

在传入的C++标准中是否会弃用auto_ptr?是否应该使用unique_ptr而不是shared_ptr进行所有权转移?如果unique_ptr不在标准中,我是否需要使用shared_ptr来代替? 最佳答案 更新:这个答案写于2010年,正如预期的那样,std::auto_ptr已被弃用。该建议完全有效。在C++0x中,std::auto_ptr将被弃用,取而代之的是std::unique_ptr。智能指针的选择将取决于您的用例和您的要求,std::unique_ptr具有可在容器内使用的单一所有权的移动语义(使用移动语义)和s