草庐IT

c++ - 在 typedef 上使用 sizeof 而不是局部变量

就像这个例子一样(在C中):typedefinttype;intmain(){chartype;printf("sizeof(type)==%zu\n",sizeof(type));//Outputs1}输出总是局部变量type的大小。当C++不再需要在每次使用结构之前编写struct时,它仍然保留了struct{type}语法并引入了别名(class{type})以显式引用结构或类。示例(在C++中):structtype{intm;};intmain(){chartype;printf("sizeof(type)==%u\n",sizeof(type));//Outputs1pri

c++ - typedef'ing enum 不会使 enum-values 可见

我有一个类,其中有一个枚举,定义如下:classX{public:enumDirection{DIR_LEFT,DIR_RIGHT};};现在我希望在另一个类中重用这个枚举,如下所示:classY{public:typedefX::DirectionDirection;};正如预期的那样,使用Y::Direction可以正常工作,例如:voidmyFunction(Y::Directiondir){}但枚举中的值似乎没有与typedef一起“复制”。如果我编写以下内容,则会出现编译错误:myFunction(Y::DIR_LEFT);相反,我不得不再次引用枚举的原始位置,像这样:myF

c++ - typedef'ing enum 不会使 enum-values 可见

我有一个类,其中有一个枚举,定义如下:classX{public:enumDirection{DIR_LEFT,DIR_RIGHT};};现在我希望在另一个类中重用这个枚举,如下所示:classY{public:typedefX::DirectionDirection;};正如预期的那样,使用Y::Direction可以正常工作,例如:voidmyFunction(Y::Directiondir){}但枚举中的值似乎没有与typedef一起“复制”。如果我编写以下内容,则会出现编译错误:myFunction(Y::DIR_LEFT);相反,我不得不再次引用枚举的原始位置,像这样:myF

C++ 疯狂 typedef : what is the point of allowing this syntax by the Standard?

老熟人:typedefintcute_int;//cute:commonandfamiliarsyntax.这个语法很完美。没问题。现在,当我们可以像上面那样编写typedef时,那么允许这种语法的意义何在:inttypedefcrazy_int;//crazy:uncommonandunfamiliarsyntax.只是为了迷惑程序员?这种语法是否在任何地方都需要(实际上我们已经使用了前一种)?从编译器的角度你怎么看?他们觉得它可爱还是疯狂?还是对编译器根本不重要?顺便说一句,这段代码来自这里:Useoftypenamekeywordwithtypedefandnew如果您想知道这是

C++ 疯狂 typedef : what is the point of allowing this syntax by the Standard?

老熟人:typedefintcute_int;//cute:commonandfamiliarsyntax.这个语法很完美。没问题。现在,当我们可以像上面那样编写typedef时,那么允许这种语法的意义何在:inttypedefcrazy_int;//crazy:uncommonandunfamiliarsyntax.只是为了迷惑程序员?这种语法是否在任何地方都需要(实际上我们已经使用了前一种)?从编译器的角度你怎么看?他们觉得它可爱还是疯狂?还是对编译器根本不重要?顺便说一句,这段代码来自这里:Useoftypenamekeywordwithtypedefandnew如果您想知道这是

c++ - GCC 的 wchar_t 有多大?

GCC支持-fshort-wchar将wchar_t从4转换为两个字节。在编译时检测wchar_t大小的最佳方法是什么,以便我可以将其正确映射到适当的utf-16或utf-32类型?至少,在c++0x发布并为我们提供稳定的utf16_t和utf_32_t类型定义之前。#if?what_goes_here?typedefwchar_tUtf32;typedefunsignedshortUtf16;#elsetypedefwchar_tUtf16;typedefunsignedintUtf32;#endif 最佳答案 你可以使用宏__W

c++ - GCC 的 wchar_t 有多大?

GCC支持-fshort-wchar将wchar_t从4转换为两个字节。在编译时检测wchar_t大小的最佳方法是什么,以便我可以将其正确映射到适当的utf-16或utf-32类型?至少,在c++0x发布并为我们提供稳定的utf16_t和utf_32_t类型定义之前。#if?what_goes_here?typedefwchar_tUtf32;typedefunsignedshortUtf16;#elsetypedefwchar_tUtf16;typedefunsignedintUtf32;#endif 最佳答案 你可以使用宏__W

c++ - 结构的区别?

两者有什么区别:typedefstructpart{inta;}Part;和typedefstruct{inta;}Part;我知道第二个是“匿名的”,但它们有什么不同吗? 最佳答案 除了MikeSeymour的回答之外,这里有一个示例说明原因:例如链表//thisworkstypedefstructpart{structpart*next;}Part;//thisdoesn'tworktypedefstruct{structPart*next;}Part;//neitherthistypedefstruct{Part*next;}

c++ - 结构的区别?

两者有什么区别:typedefstructpart{inta;}Part;和typedefstruct{inta;}Part;我知道第二个是“匿名的”,但它们有什么不同吗? 最佳答案 除了MikeSeymour的回答之外,这里有一个示例说明原因:例如链表//thisworkstypedefstructpart{structpart*next;}Part;//thisdoesn'tworktypedefstruct{structPart*next;}Part;//neitherthistypedefstruct{Part*next;}

c++ - 在 C++ 类中前向声明 typedef

在类中转发声明typedef的最佳解决方案是什么。这是我需要解决的一个例子:classA;classB;classA{typedefboost::shared_ptrPtr;B::Ptrfoo();};classB{typedefboost::shared_ptrPtr;A::Ptrbar();};我想我可以做到以下几点:boost::shared_ptrfoo();但是有更优雅的解决方案吗? 最佳答案 不幸的是,没有向前声明typedef这样的事情。但是,使用后期模板实例化有一个技巧:templateclassBImpl;temp