草庐IT

int_member

全部标签

C++:int 的默认长度是多少?

我已经搜索了一段时间,但找不到这个看似简单的问题的明确答案:int的默认长度是多少?我知道默认情况下,一个int是有符号的。但它是短的还是长的?根据下一页中的“基本数据类型”表,默认情况下int是longint(4字节)。http://www.cplusplus.com/doc/tutorial/variables/它总是正确的,还是取决于操作系统(32位/64位)、编译器或其他因素? 最佳答案 这取决于编译器实现者。int应该是平台的最佳“native”长度。这里的最佳native通常是指对于目标处理器来说最方便/最有效/最快速的

c++ - 为什么这个 map<int, auto> 是不允许的?

我正在尝试用C++实现异构映射。我知道之前已经讨论过这个问题,但我想知道为什么不允许以下内容:mapmyMap;有什么方法可以让我在不借助(void*)指针的情况下简单地插入map?我在考虑最终能够做这样的事情:vectorv;myMap.insert(make_pair(1,12334));myMap.insert(make_pair)(2,v));这可能吗?还是我的努力是徒劳的?谢谢 最佳答案 auto并不意味着“这可以是任何类型”。它是一个特殊的关键字,只能用于声明变量,其含义是“这个变量的类型与用来初始化它的表达式的类型相同

c++ - C++ 中的信号 : using a member function

我在使用signal()时遇到了这个问题:这段代码编译得很好:#include#include#includevoidterminate(intparam){printf("Terminatingprogram...\n");exit(1);}intmain(){signal(SIGTERM,terminate);return0;}但是,下面的代码会抛出这个错误:g++-Wall-c-ggoober.cppgoober.cpp:Inmemberfunction`voidGOOBER::yarrgh()':goober.cpp:5:error:argumentoftype`void(GO

c++ - 从零到定义的数字填充int数组

我需要在C++中从零到变量定义的数字填充int[]数组,但ISOC++禁止可变长度数组...如何轻松填充数组?我需要分配/释放内存吗?intpossibilities[SIZE];unsignedinti=0;for(i=0;i顺便说一句。如果你会问-是的,我需要完全标准的int[]数组,没有vector,没有map等。 最佳答案 在C++11中,您可以使用std::iota和std::array。下面的示例使用1到10之间的值填充大小为10的数组。std::arraya;std::iota(a.begin(),a.end(),1)

c++ - RAII : Initializing data member in const method

在RAII中,资源在被访问之前不会被初始化。但是,许多访问方法都声明为常量。我需要调用一个mutable(非常量)函数来初始化一个数据成员。示例:从数据库加载structMyClass{intget_value(void)const;private:voidload_from_database(void);//Loadsthedatamemberfromdatabase.intm_value;};intMyClass::get_value(void)const{staticboolvalue_initialized(false);if(!value_initialized){//The

c++ - 模板类 : static members not inherited

这个问题在这里已经有了答案:Whydoesn'taderivedtemplateclasshaveaccesstoabasetemplateclass'identifiers?(4个答案)关闭7年前。下面的代码templatestructBase{staticconstinta=c+5;};templatestructDerived:Base{staticconstintb=a+5;};...编译失败因为awasnotdeclaredinthisscope.明确指定Base::a有效,但从逻辑上讲这不是必需的,因为我们是从Base派生的.这是预期的行为(以及为什么)还是我遗漏了什么?

C++ 多态性 : Is there any way to find the address of an object's member function?

如果我有一个纯虚拟基类及其多个派生...classBase{public:virtualvoidmethod1()=0;}classDerived1:publicBase{public:voidmethod1()override{...}}classDerived2:publicBase{public:voidmethod1()override{...}}有什么方法可以让持有未知派生类型对象的Base*的代码确定它持有的对象的method1()函数的地址Base*指针指向?我想做的是这样的:voidsomeOtherFunction(Base*pb){printf("IfIcallpb

c++ - Ptr-to-member 模板参数的 Friend 语法

好吧,所以我认为这是一个纯粹的C++语法问题。我有一个用ptr-to-member作为其模板参数之一定义的类:templateclassMy_list{我有另一个简单的类,它是这个类的友元。通常,我会写:classMy_friend_class{templatefriendclassMy_list;};...但是,因为第二个模板参数不是那么自由...我该如何表达友元?谢谢! 最佳答案 也许更好的问题是“为什么?”而不是“如何?”您到底想达到什么目的?当您的C++代码变得复杂和丑陋时,这通常是一个警告,表明您正在错误地处理问题。

c++ - (cin >> int).get() 在 Xcode(4.3.3) 中无法正常工作

我目前正在编写“C++PrimerPlus”一书并进行一些编程练习。看起来,我在使用Xcode(4.3.3)时遇到问题,因为以下代码无法正常工作:#include#includestructcar{std::stringmaker;intyear;};intmain(){usingnamespacestd;cout>nCars).get();car*aCars=newcar[nCars];for(inti=0;imaker);cout>(aCars+i)->year).get();}coutyearmaker问题是,我没有机会进入任何制造商。该程序直接转到我必须输入年份的位置,即使我使

c++ - 为什么 Visual Studio 不在 self 赋值时发出警告 (int foo = foo;)

我在重构一个出现了无数次的术语时不小心产生了如下代码中的情况:#include"stdafx.h"#includeintfoo=foo;//Byreplacingwiththefollowinginstructionwecausesacompileerror//intfoo(foo);int_tmain(intargc,_TCHAR*argv[]){intbar=bar;std::cout对于不同的调试和发布配置,编译器对intfoo=foo;保持沉默。我看不出这种说法不是等待发生的错误。VisualStudio编译器不应该发出警告吗?我并不是假装这是未定义的行为。我的意思是,默认情况