草庐IT

int_types

全部标签

c++ - std::vector<T>::value_type 的正确行为

在对一些使用std::vector::value_type的模板代码中的一些错误摸不着头脑之后,我追踪到了以下内容。这是符合标准的正确行为,还是MSVC2012CTP的问题?typedefstd::vector::value_typet1;typedefstd::vector::value_typet2;static_assert(!std::is_same::value,"hmmm");上述断言失败。 最佳答案 value_type的std::vector是T(§23.3.6.1)。is_same的值将简历限定符考虑在内(§20.

c++ - int 转换——给我奇怪的数字

我是编程世界的新手,C++已经让我迷失了方向。我的程序中有这些行pennies=(amount-nickels*.05)/.01;amount是double,而nickels是int。当pennies是double时,程序返回正确的值,但每当pennies是一个int。为什么会这样? 最佳答案 发生这种情况是因为值被截断从而失去了小数精度。对于整数:inti;i=1.1//stores1inii=1.2//stores1inii=1.3//stores1inii=1.4//stores1inii=1.5//stores1inii=1

c++ - 缩小从 int 到 long unsigned int {} 的转换在 C++11 中格式错误

当我运行以下代码时-我收到警告“在C++11[-Wnarrowing]中,{}中从int到longunsignedint的缩小转换是错误的。我正在使用GNU4.8编译器。typedefstructTableEntry{unsignedlongvalue;constchar*label;}TableEntry;enumFunctionType{NORMAL=0,RANGE=1};TableEntryfunctionTypes[]={{NORMAL,"NORMAL"},{RANGE,"RANGE"}};我不明白为什么编译器将枚举视为整数?这是GCC4.8中的错误吗?有什么解决方法吗?任何帮

c++ - size_type 和 int 之间的区别

#include#includeusingnamespacestd;intmain(){vectorstudent_marks(20);for(vector::size_typei=0;i>student_marks[i];}return0;}我在某处读到,最好使用size_type代替int。它真的会对实现产生巨大影响吗?使用size_type有什么好处? 最佳答案 vector::size_type保证涵盖vector大小的所有可能值范围.一个int不是。请注意vector::size_type通常与std::size_t相同,

c++ - 如何在不使用 to_string 或 stoi 的情况下将 int 转换为 C++11 中的字符串?

我知道这听起来很愚蠢,但我在Windows7上使用MinGW32,并且“to_string未在此范围内声明。”It'sanactualGCCBug,我关注了theseinstructions他们没有工作。那么,如何在不使用to_string或stoi的情况下将int转换为C++11中的字符串?(另外,我启用了-std=c++11标志)。 最佳答案 这不是最快的方法,但您可以这样做:#include#include#includetemplatestd::stringstringulate(ValueTypev){std::ostri

c++ - 警告 : function uses 'auto' type specifier without trailing return type

下面的代码给出了下面的警告。有人可以解释原因吗(请注意代码没有用,因为我用int替换了我的类型来制作一个完整的示例)。警告:“MaxEventSize()”函数使用“auto”类型说明符而没有尾随返回类型[默认启用]想法是获取特定结构的最大大小(类型位于int所在的位置)。templateconstexprTcexMax(Ta,Tb){return(a 最佳答案 auto返回类型“没有尾随返回类型”是C++14的一个特性,所以我想你正在编译C++11。您的代码适用于C++14,但对于C++11,如果您想使用auto作为返回类型,您需

c++ - g++ 使用 "expected a type, got ' xyz' 拒绝我的简单仿函数”

我一直在研究C++中的仿函数。特别是,我有一个vector对,我想按对的第一个元素排序。我开始编写一个完全专门化的仿函数(即类似“boolMyLessThan(MyPair&lhs,MyPair&rhs)”的东西)。然后,仅仅因为这类东西很有趣,我想尝试编写一个通用的“将F应用于这对的第一个元素”仿函数。我写了下面的内容,但g++不喜欢它。我得到:错误:“templatestructPair1stFunc2”的模板参数列表中参数2的类型/值不匹配错误:需要一个类型,得到的是“less”#include#include#include#includetemplatestructPair1

c++ - 为什么我们在定义指针时使用 "type * var"而不是 "type & var"?

我是C++的新手(断断续续有大约一年的经验)。我很好奇是什么导致决定将type*name作为定义指针的语法。在我看来,语法应该是type&name因为&符号在代码中的其他任何地方都使用来引用变量的内存地址。因此,使用int指针的传统示例:inta=1;int*b=&a;会变成inta=1;int&b=&a我确信这其中有一些我没有看到的原因,我很想听听C++老手的一些意见。谢谢,-S 最佳答案 C++采用了C语法。正如“TheDevelopmentoftheCLanguage”(DennisRitchie着)中所揭示的那样,C在类型声

c++ - 填充作为成员变量的 int 数组

我正在使用C++为游戏创建瓦片map。我的问题是,我想在Map构造函数中填充一个多维整数数组,但它无法正常工作。这是我在“Map.h”中的代码(不相关的代码已被删除)。classMap{private:intmapArray[15][20];};还有我来自Map.cpp的代码Map::Map(){mapArray={{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19},{20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39},{40,41,42,43,44,45,46,4

c++ - 哪种转换是从 Type* 到 void*?

在C++中,对于任何数据类型,我都可以执行以下操作:Type*typedPointer=obtain();void*voidPointer=typedPointer;当我将Type*分配给void*时执行哪个转换?这和Type*typedPointer=obtain();void*voidPointer=reinterpret_cast(typedPointer);还是其他Actor? 最佳答案 这是一个标准的指针转换。由于它是标准转换,因此不需要任何显式转换。如果您想使用显式转换重现该转换的行为,则应使用static_cast,而