草庐IT

int_void

全部标签

C++ 为什么使用从 (std::string) 到 (void) 类型的隐式转换?

我在查看CPP-NETLIB的源代码时遇到了描述概念的语法。templatestructClientRequest:network::Message{BOOST_CONCEPT_USAGE(ClientRequest){std::stringtmp;Rrequest_(tmp);swap(request,request_);//swappableviaADLstd::stringhost_=host(request);boost::uint16_tport_=port(request);std::stringpath_=path(request);std::stringquery_=q

isDigit(c) - char或int类型?

我已经编写了以下代码来测试给定输入是否为数字。#include#include#includeusingnamespacestd;main(){charc;cout>c;if(isdigit(c))//intisdigit(intc)orcharisdigit(charc){cout我的问题是:输入变量类型应该是什么?char还是int?看答案不幸的是,这种情况比其他答案所指出的要复杂得多。首先:代码的第一部分是正确的(无视多字节编码);如果您想阅读一个char和cin,您必须使用char变量>>操作员。现在,关于isdigit:为什么需要int代替char?一切都来自c;isdigit它的同

c++ - Clang 在哪里存储 int32_t *p 和 int32_t p[10] 之间的差异?

我想确保这种类型的代码voidf1(int32_tp[10]);voidf2(int32_t*p);voidb(){int_32_ta[10];f1(a);f2(a);}在有人编码时不会发生,因为在使用f2()时,您可能会丢失有关数组边界的信息。它是MISRA标准规则之一。但是AST转储在两个函数声明之间没有区别:|-FunctionDecl0x2204140f1'void(int32_t*)'|-ParmVarDecl0x2204040p'int32_t*'|-FunctionDecl0x2204280f2'void(int32_t*)'|-ParmVarDecl0x2204200p

c++ - 使用和何时使用 int16_t、int32_t、int64_t 和分别为 short int、int、long int、long

使用和何时使用int16_t、int32_t、int64_t以及分别使用short、int,长。C++中有太多该死的类型。对于整数,什么时候使用一个而不是另一个是正确的? 最佳答案 当精度很重要时,使用明确定义的类型。当它不是时,使用不太确定的。使用更精确的永远不会错。当您使用灵活的时,有时会导致错误。 关于c++-使用和何时使用int16_t、int32_t、int64_t和分别为shortint、int、longint、long,我们在StackOverflow上找到一个类似的问题:

c++ - 从 abs(double) 而不是 int 获得双重结果

我需要计算两个double值之差的绝对值,并得到一个double结果。相反,我得到一个int。#include//...printf("a:%sb:%sdelta:%sabs:%s\n",typeid(a).name(),typeid(b).name(),typeid(a-b).name(),typeid(abs(a-b)).name());//Prints:a:db:ddelta:dabs:i如果减法的结果已经是double,为什么abs不使用doubleabs(doublex);签名?事实上,它怎么可能返回一个整数呢?最重要的是,我如何强制它返回一个double?以防万一,a和b实

c++ - C++ 中的 void(*) 有什么意义吗?

我正在尝试理解C++函数指针语法。当我在Linux上的Eclipse中键入:void(*);它用一条消息说语法错误突出显示了该语句,但它让我编译它并且程序运行了。然后在VisualStudio上我试了一下,它不会编译,说“预期的表达式”。然而奇怪的是,当我这样做时:std::vectormyVector;它在VisualStudio上编译良好。还有一些在线编译器void(*);它自己工作正常。我知道:void(*)();...是一个函数指针并且..void();...是一个函数签名,这就是为什么你可以这样做:std::functionfunc;我在理解函数指针语法时遇到了很多麻烦。谢谢

c++ - uint64_t 中的唯一值在 int64_t 中是否也是唯一的

给定一个唯一的(std::uint64_t类型)整数vector,如果我将(std::uint64_t类型)的vector转换为(std::int64_ttype)integers,能保证唯一吗?像这样类型转换std::vectorunsignedVec;std::vectorsignedVec(unsignedVec.begin(),unsignedVec.end()); 最佳答案 willitbeguaranteedtobeunique?形式上它是实现定义的,但在任何合理的平台上它应该是唯一的。(特别是考虑到int64_thas

c++ - 类型到 int 的映射

我有两个c++程序需要有一个映射type->int,它在编译时已知并且两个程序之间相等。此外,我想在编译时自动确保map是一对一的。你会如何解决这个问题?(允许使用c++0x扩展)。第一部分很简单:分享一个templatestructmap;templatestructmap{enum{val=...;};};程序之间。(第二部分意味着我不想在我的程序中的某处意外地为两种不同的类型定义相同的val。) 最佳答案 确保uniqeid的一种方法是滥用友元函数定义templatestructmarker_id{staticintconst

C++ 标准 : default "const T& value" in vector constructor for type 'int'

explicitvector(size_typen,constT&value=T(),constAllocator&=Allocator());vectorvec(10);cout::const_iteratoriter=vec.begin();iter!=vec.end();++iter){coutVS2010的输出:vec.size:100000000000问题>:根据最新的C++标准,当我们使用vectorObject(size_type)定义一个vector对象时,默认的int值是多少?在这里你可以看到,VS2010输出0作为默认的int值。但我不知道这是否是C++标准所要求的

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