草庐IT

different-size

全部标签

c++ - 为什么我需要在 C++ 中使用 `size_t`?

作为初学者,我对size_t真的很困惑。我可以使用int、float或其他类型。为什么还要声明size_t类型。我感觉不到它的优点。我看过一些pages,但我仍然无法理解。 最佳答案 它的主要优点是它是完成这项工作的正确工具。size_t按字面定义为足够大以表示您平台上任何对象的大小。其他人不是。所以,当您想存储对象的大小时,为什么要使用其他东西?如果您愿意,可以使用int,但您会故意选择导致错误的劣势选项。我不太明白您为什么要这样做,但这是您的代码。不过,如果您选择使用float,请告诉我们您正在编写什么程序,以便我们避免使用它。

c++ - 未找到 difference_type

当我尝试使用std::distance时使用gcc4.7下的自定义迭代器,它提示找不到difference_type.遗憾的是,我不知道为什么会失败。#includeclassnit{public:typedefintdifference_type;};intmain(){constnittest1;std::distance(test1,test1);return0;}给出错误:/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h:114:5:error:notypenamed‘difference_type’in‘structstd

c++ - "...redeclared as different kind of symbol"?

#include#includedoubleintegrateF(doublelow,doublehigh){doublelow=0;doublehigh=20;doubledelta_x=0;doublex,ans;doubles=1/2*exp((-x*x)/2);for(x=low;x它说low和high被“重新声明为不同类型的符号”,我不知道那是什么意思。基本上,我在这里所做的一切(阅读:尝试)是从低(我设置为0)到高(20)积分以找到黎曼和。for循环看起来也有点迷幻……我迷路了。编辑:#include#includedoubleintegrateF(doublelow,do

c++ - C 和 C++ : Difference between Casting and Conversion

下面代码中第2行和第3行有什么区别吗?编译器在每种情况下做什么?charch='A';//line1inti=ch;//line2intj=(int)ch;//iine3一般来说,转换和转换(在C和C++中)有什么区别? 最佳答案 最终效果没有区别。cast是使用显式的、通用的、内置的castnotation进行转换。尽管在某些情况下,当我们指的是从Derived*到Base*(或从Derived&到Base&)的隐式转换时,我们会说“向上转换”。在某些情况下,人们定义了新的转换符号。术语的上述定义只是一个操作定义,也就是说,它不是

c++ - 为什么 std::string::max_size 的值是 "strange"?

我在看std::string::max_size并注意到这个例子:#include#includeintmain(){std::stringstr("Teststring");std::cout输出:max_size:4294967291但是,我一直认为这个限制是由于无符号整数/size_t的最大值造成的-所以我有点希望它是2^32-1也就是4294967295。为什么此示例中的最大大小不使用这4个字节?我还尝试运行示例代码,在那台机器上它是2^62-这又让我感到困惑,为什么不是2^64-1代替?总的来说,我想知道,实现不会使用所有空间的原因是什么? 最佳答

c++ - 如果类有析构函数/delete[],则成员运算符 new[] 的参数 "size"增加

以下代码中的4个类:A、B、C和D。他们都有一个成员operatornew[]。此外,B有一个构造函数;C有析构函数;D有一个成员operatordelete[]。输出成员operatornew[]的参数size和4个类的sizeof:new[]A40new[]B40new[]C48new[]D48sizeof(A)4sizeof(B)4sizeof(C)4sizeof(D)4大小不同的原因是什么?代码(我知道很丑):#includeusingnamespacestd;classA{inti;public:staticvoid*operatornew[](std::size_tsize

C++ 重载 new[] 查询 : What size does it take as parameter?

我像这样重载了operatornew[]void*human::operatornew[](unsignedlongintcount){cout现在打电话human*h=newhuman[14];说sizeof(human)=16,但计算它打印出来的是232,也就是14*16+sizeof(int*)=224+8。为什么要分配这个额外的空间?它落在内存中的什么地方?因为当我打印*h或h[0]我得到相同的结果,所以它不在内存块的开头。它是否完全正确,或者我在这里遗漏了一些东西? 最佳答案 分配的额外空间用于存储内部使用的数组大小(在实

c++ - 从 size_t 转换为 int,还是用 size_t 迭代?

将迭代器条件右操作数从size_t转换为int更好,还是迭代可能超过int的最大值?答案实现具体吗?inta;for(size_ti=0;i 最佳答案 我几乎总是使用第一个变体,因为我发现大约80%的时间,我发现some_func应该也需要一个size_t。如果事实上some_func采用带符号的int,您需要了解当vect大于INT_MAX时会发生什么.如果解决方案在您的情况下不明显(通常不是),您至少可以替换some_func((int)i)与some_func(numeric_cast(i))(有关numeric_cast的一

c++ - std::match_results::size 返回什么?

我对以下C++11代码有点困惑:#include#include#includeintmain(){std::stringhaystack("abcdefabcghiabc");std::regexneedle("abc");std::smatchmatches;std::regex_search(haystack,matches,needle);std::cout我希望它打印出3但我却得到了1。我错过了什么吗? 最佳答案 你得到1因为regex_search仅返回1个匹配项,size()将返回捕获组的数量+整个匹配值。你的匹配是.

c++ - VS2008 : Can I build a project with 2 CPP files of the same name in different folders?

这是我的文件夹结构:/|--program.cpp--utility.h--utility.cpp|--module/|--utility.h--utility.cpp//NotethatIhavetwofilesnamedutility.handtwonamedutility.cpp在构建项目时,我收到链接错误(LNK2028:未解析的token等...),指出某些符号未定义。我已经确认所有符号都已定义,并且所有声明的函数都有相应的定义。我有一种感觉,在编译我的项目时,两个文件夹中的utility.cpp文件被编译到输出文件夹中的相同utility.obj中。结果,一个覆盖了另一个。