我刚刚看到一些像这样的C++代码。它使用一个条件来决定是通过std::vector向前走还是向后走。编译器没有提示,但我认为size_t是未签名的。这很危险吗?vectorv{1,2,3,4,5};boolrev=true;size_tstart,end,di;if(rev){start=v.size()-1;end=-1;di=-1;}else{start=0;end=v.size();di=1;}for(autoi=start;i!=end;i+=di){cout 最佳答案 以这种方式使用无符号整数(并且size_t是无符号的)
刚读完:Does"std::size_t"makesenseinC++?我意识到使用::size_t不符合标准(虽然我的编译器支持)当你#include.我想遵守标准,但我不想在前面加上std::我所有的size_t的。那么,更习惯/流行的处理方式是什么:写usingstd::size_t;?包括?仅仅依靠编译器的支持?还有别的吗? 最佳答案 您应该使用using指令指定它。usingstd::size_t;将其添加到每个编译单元的全局范围,或者如果它会在全局范围内造成干扰,则将其添加到本地范围。stddef.h也有效,正如您所指出
引用以下代码#include#includetemplatestructWot;templatestructWot>{};intmain(){assert(sizeof(Wot>)==1);}这适用于clang但不适用于gcc,当我更改部分特化的类型以在索引序列中接受std::size_t但它有效时。谁是对的?Clang还是gcc?在此处查看实际操作https://wandbox.org/permlink/5YkuimK1pH3aKJT4 最佳答案 gcc是对的。这正是[temp.deduct.type]/18:IfPhasafor
我在一本书http://www.acceleratedcpp.com/中发现了这个有趣的行-资源-第11章-Vec.h(我是一个std::vector翻版)而且我真的不明白这个版本的运算符有什么用。为什么要定义此运算符的两个版本(常量和非常量)?我什至试过了,在我看来,非常量版本一直被调用......你能解释一下吗?#include#include#include#includeusingnamespacestd;templateclassVec{public:typedefT*iterator;typedefconstT*const_iterator;typedefsize_tsiz
我使用-1作为返回类型为size_t(无符号类型)的函数的标志值。一开始我没有注意到它,特别是因为它没有在我的代码中造成任何错误(我用x==-1来检查它,而不是x有什么微妙的原因我不应该保持原样吗?这什么时候可能会出乎意料?这个常用吗?ptrdiff_t不太常见,需要更长的输入时间,而且它并不是真正合适的类型,因为该函数返回数组的索引。 最佳答案 -1将始终转换为最大无符号值,这是由于4.7Integralconversions部分:Ifthedestinationtypeisunsigned,theresultingvalueis
在Release模式下链接我的项目时,我收到以下警告:myProject-libs/release/libboost_regex-mt-s-1.50.0.a(cpp_regex_traits.o):duplicatesection`.data$_ZZN5boost16cpp_regex_traitsIcE21get_catalog_name_instEvE6s_name[boost::cpp_regex_traits::get_catalog_name_inst()::s_name]'hasdifferentsize我怀疑原因可能是boost库的编译选项与我在项目中使用的选项不同,但我
在我的项目中使用的源文件中,ssize_t和size_t变量之间有一个比较:ssize_tsst;size_tst;if(sst==st){...}我想摆脱警告:warning:comparisonbetweensignedandunsignedintegerexpressions但我不确定,我应该将哪个变量转换为另一个变量?if((size_t)sst==st){...}或if(sst==(ssize_t)st){...}什么更安全、更好、更清洁?谢谢 最佳答案 这个问题没有唯一的正确答案。有几种可能的答案,具体取决于您对这些变量
假设我有一个函数:inttest(std::array*data){charbuffer[data->size()*2];[...somecode...]}显然可以在编译时评估缓冲区的大小:数据的constexpr大小为8个元素,8*2=16字节。然而,当使用-Wall、-pedantic和-std=c++11编译时,我得到了臭名昭著的错误:warning:variablelengtharraysareaC99feature[-Wvla-extension]我认为这是有道理的:array::size()是constexpr,但它仍然是一个方法,在上面的函数中我们仍然需要取消引用一个指针
我刚刚开始使用EclipseIndigo(来自Galileo),每次使用size_t时,我都会遇到一些红色的小错误。代码编译没有问题,但我怀疑我必须显式添加到包含目录的路径。我已经有常见的嫌疑人了。我正在使用Gnu工具链为ColdFire处理器进行交叉编译,因此除了来自芯片制造商的标准包含之外,我还包含m68k-elf下的包含\include\include\c++\4.2.1\include\c++\4.2.1\include\include\c++\4.2.1\m68k-elf更新我注意到这个工具链唯一存在stddef.h的地方是lib目录gcc-m68k\lib\gcc\m68k
在C++11中,std::vector::resize()有两个版本:voidresize(size_typecount);voidresize(size_typecount,constvalue_type&value);我理解(正如对thisquestion的一个答案的评论之一所建议的那样)第一个要求value_type是默认可构造的,而第二个要求它是可复制构造的。但是,(gcc4.7.0)usingnamespacestd;typedefintblock[4];vectorA;static_assert(is_default_constructible::value,";-(");