草庐IT

c++ - 无符号整数如何工作

如标题所示,我很好奇unsignedint(或类似NSUInteger、u_int_blah的东西,但我认为这些是同一事物的所有typedef)都有效。例如,当它们的值低于零时,是否会引发异常?会不会出错?一个具体示例是间接将值设置为负数。for(unsignedintx=5;x>-10;x--){//willxeverreachbelowzero,orwilltheloopterminate}此外,另一种间​​接设置它的方法是让用户输入它。printf("Enteranumber");unsignedintx;scanf("%ud",&x);//userenterssomething

c++ - 如何防止以错误的顺序传递函数参数?

假设我有一个如下所示的C++函数:doublemyfunction(doublea,doubleb){//dosomething}然后我这样调用它:doublea=1.0;doubleb=2.0;doublegood_r=myfunction(a,b);doublebad_r=myfunction(b,a);//compilesfine我想确保a和b永远不会以错误的顺序提供。在C++中确保这一点的最佳方法是什么?其他语言允许命名参数,像这样:doublegood_r=myfunction(a=a,b=b);doublebad_r=myfunction(a=b,b=a);//mistak

c++ - 此指针类型转换符号的含义

我已经多次看到这种类型的声明,但不知道它在做什么:*(type*)$var例如:*(char*)&myChar如果正在检索myChar的地址并将其转换为char指针,那么为什么额外的指针在外面,为什么地址可能是int或hex值被转换为指针?这对我来说毫无意义。我是初学者,所以请逐步解释这里发生了什么,以及为什么使用这种令人困惑的格式进行类型转换。谢谢。 最佳答案 *(char*)&myChar获取myChar的地址,然后转换为char*,最后访问它指向的对象。效果是,访问将根据类型转换指针类型。例如intx;charc=*(char

c++ - 如何编写模板将 vector 转换为 Json::Value (jsoncpp)

我写了一个模板(如下所示)但是编译失败templateclassiterable>Json::Valueiterable2json(constiterable&cont){Json::Valuev;for(constt&elt:cont){v.append(elt);}returnv;}std::vectorvec{1,2,3};Json::Valuev=iterable2json(vec)错误C3312:找不到类型“conststd::_Vector_val”的可调用“开始”函数与[_Val_types=std::_Simple_types]参见正在编译的函数模板实例化'Json::

c++ - 检查对象类型真的总是糟糕设计的标志吗?

我有几行文本的来源,每一行都是一条消息,代表某种类型的对象。我正在为这些行创建一个解析器,它应该将文本行作为输入并将准备好使用的对象作为输出。所以我制作了以下类层次结构:classMessage{public:virtual~Message(){};};classObjectTypeA:publicMessage{/*...*/};classObjectTypeB:publicMessage{/*...*/};classObjectTypeC:publicMessage{/*...*/};下面是它的使用方式:std::shared_ptrparseLine(std::string&li

c++ - C++ "type deduction"和 Haskell "type inference"有什么区别?

在英语语义中,“typededuction”等于“typeinferring”吗?我不确定这只是不同语言设计者选择的成语偏好,或者计算机科学给出了严格的“类型推导”定义,哪个不是“类型推断”?谢谢。 最佳答案 C++规范和工作草案广泛使用“类型推导”来指代没有类型声明作为引用的表达式类型;例如thisworkingdraftonconcepts在谈论auto声明的变量时使用它,我记得很多书在谈论模板时都使用它,那时候我不得不学习——然后忘记了大部分——C++。Typeinference但是,它有自己的维基百科页面,也是编程语言理论中

c++ - 如何在 C++ 中为不同的迭代器 value_types 重载函数

我想在C++11中实现一个带有一对迭代器的模板函数。如果传递了一对迭代器,其值类型是任意类型的std::pair,则实现应该做一些特殊处理。我试图提出以下定义://arbitraryvaluetypestemplatevoidprocess(Iterbegin,Iterend){for(Iteriter=begin;iter!=end;++iter){std::cout::value_type,std::pair>::value>::type*=0>voidprocess(Iterbegin,Iterend){for(Iteriter=begin;iter!=end;++iter){s

c++ - 如何在检测习语中要求精确的函数签名?

假设我有一个类型T我想检测它是否有一个下标运算符,我可以用另一种类型调用它Index.以下示例工作正常:#include#includetemplateusingsubscript_t=decltype(std::declval()[std::declval()]);intmain(){usinga=subscript_t,size_t>;usingb=subscript_t,int>;}但是,我希望当且仅当函数签名完全匹配时才能检测到该函数。在上面的示例中,我想要语句subscript_t,int>;抛出类似noviableoverloadedoperator[]的错误,因为std:

c++ - 在不使用 std 的情况下如何使用 int32_t?

这是我的代码:#includeintmain(){int32_ti=5;std::cout这是输出:$clang++-std=c++11-pedantic-Wall-Wextrafoo.cpp&&./a.outi:5这是我的问题:C++标准似乎在std命名空间内的cstdint中定义了int32_t。在我的代码中,我既没有包含cstdint也没有使用std命名空间。为什么编译器不报错? 最佳答案 名字int32_t也出现在C库头文件的全局范围内stdint.h.这可能使它在C++中也全局可见。本节[Headers]说:...thec

c++ - 什么是复合类型?

我的问题是关于复合类型的。我似乎找不到任何地方可以解释C++中的复合类型。它们与复合类型有什么不同吗? 最佳答案 摘自C++Primer,第5版:Acompoundtypeisatypethatisdefinedintermsofanothertype.C++hasseveralcompoundtypes,twoofwhich,referencesandpointers...我认为这意味着复合类型是类似于引用和指针的类型。如果我错了,请纠正我。 关于c++-什么是复合类型?,我们在Sta