- 浏览: 3022403 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
今天要写个东西,参照的一段C++代码里看到了诡异的东西,形式类似:
注意是C++哦。跟C不同,C++里用struct语法声明了类之后直接用类名就可以声明变量/参数了,而不必像C一样要写struct+结构体名,所以也就没有typedef的必要。
上面这种typedef虽然无害,但毕竟相当的不C++,稍微变化一下就会很诡异:
这就开始诡异了……
这里提到的那段代码肯定是C++的没错,用了std::map之类的,请读者不必多疑……
所以说名字空间污染了嘛……因为这里跟C的语义不一样,所以看起来很不爽。想像一下原本在C里写了:
那后面就得用struct A才可以使用到这个类型,于是“普通”类型的名字空间跟struct/union的就是分开的。所以才要typedef。C++里就没有这种形式的名字空间划分,这里用typedef太诡异了……
我所说的代码的其中一段类似这样:
typedef struct A { // ... } A;
注意是C++哦。跟C不同,C++里用struct语法声明了类之后直接用类名就可以声明变量/参数了,而不必像C一样要写struct+结构体名,所以也就没有typedef的必要。
上面这种typedef虽然无害,但毕竟相当的不C++,稍微变化一下就会很诡异:
#include <iostream> using namespace std; typedef struct A { int value; } B; int main() { A a; a.value = 42; B& b = a; cout << b.value << endl; }
这就开始诡异了……
这里提到的那段代码肯定是C++的没错,用了std::map之类的,请读者不必多疑……
评论
5 楼
lwwin
2010-06-12
少有的,能够看懂你写的BLOG!!= =||||
忽然总觉得啥都不懂呢~~不愧是FX
忽然总觉得啥都不懂呢~~不愧是FX
4 楼
night_stalker
2010-06-12
写在局部就更不污染命名空间了:
很有 Ruby 里 Struct 的风范 ……
#include <stdio.h> typedef struct { int value; } B; int main() { B b; struct { int value; } c; // 少写一个 e 看看 B 会不会提示成匿名 struct b.valu = 41; c.valu = 41; printf("%d,%d\n", b.value, c.value); }
很有 Ruby 里 Struct 的风范 ……
$ gcc typedef.c typedef.c: In function 'main': typedef.c:14: error: 'B' has no member named 'valu' typedef.c:15: error: 'struct <anonymous>' has no member named 'valu'
3 楼
night_stalker
2010-06-12
或者这样:
没有 A 自然就没人用 A 了
typedef struct { int value; } B;
没有 A 自然就没人用 A 了
2 楼
RednaxelaFX
2010-06-12
glacjay 写道
A是正体,B是别称,没问题哦。当然如果A不需要B这个别名的话就有问题了。
所以说名字空间污染了嘛……因为这里跟C的语义不一样,所以看起来很不爽。想像一下原本在C里写了:
struct A { // ... };
那后面就得用struct A才可以使用到这个类型,于是“普通”类型的名字空间跟struct/union的就是分开的。所以才要typedef。C++里就没有这种形式的名字空间划分,这里用typedef太诡异了……
我所说的代码的其中一段类似这样:
typedef struct ClassInfo { jclass clsptr; char *name; int64_t size; int count; int64_t imp_size; int imp_count; int8_t flag; std::map<int, int> *clsRefInfo; } ClassInfo;
1 楼
glacjay
2010-06-12
A是正体,B是别称,没问题哦。当然如果A不需要B这个别名的话就有问题了。
发表评论
-
字符串的一般封装方式的内存布局 (0): 拿在手上的是什么
2013-11-04 18:22 21396(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局
2013-11-01 12:55 0(Disclaimer:未经许可请 ... -
关于string,内存布局,C++ std::string,CoW
2013-10-30 20:45 0(Disclaimer:未经许可请 ... -
struct做参数不能从寄存器传?
2013-08-28 23:33 0test test test struct Foo { i ... -
[入门级] 使用inline函数的陷阱
2011-04-21 22:39 0xxx.hpp xxx.inline.hpp inline ... -
C++的vtable的name mangling
2011-04-21 21:53 0_ZTV 开头 -
C++的虚方法调用的开销
2010-01-10 02:53 0不只是从vftbl找到函数指针那么简单而已。因为C++支持多继 ... -
C++求值顺序
2009-12-12 23:16 0呵呵,有个例子总是形 ... -
__fastcall由callee做栈平衡
2009-10-14 01:51 0#include <iostream> usin ... -
typedef...
2009-06-16 21:22 0原来函数指针能这样用的啊……原来typedef不只可以用来声明 ... -
拿vtable来玩玩
2009-06-04 03:53 0#include <iostream> usin ... -
从1加到N……我败了
2009-05-11 10:06 0有人提到Python比C++优越因为代码短而简洁,并举例说1加 ... -
delete NULL会怎样?
2009-04-22 10:03 8064原文在此:Can you delete a NULL poin ... -
Boost 1.35.0
2008-06-25 04:45 0Boost C++ Library Version 1.35. ... -
确定性析构在有指针的环境下的麻烦之处
2008-05-16 11:26 2580刚考完大软,心里还在 ... -
typename关键字的使用
2008-05-15 11:31 2872忘了……模板啊忘光了 T T 今天有同学考C++,后来问了我 ... -
又是宏……do..while(0)的用法
2008-05-04 20:24 4640真是的,我用C++还是太少了。这个宏以前明明见过的,但其存在的 ... -
火星了,今天才知道C++0x也通过了lambda表达式/闭包的提案
2008-04-16 19:31 3032如题。我总是后知后觉诶。不过这提案有意思…… 之前我在C#与 ... -
将ANTLR生成的.tokens文件重格式化(C++版)
2008-03-28 02:02 2411相关链接: 将ANTLR生成的.tokens文件重格式化(Ru ... -
奇怪的宏
2007-11-05 22:19 2082我C++确实不怎么样,不过近来不得不再唤醒那远古的记忆……即使 ...
相关推荐
c++笔记struct和typedef struct彻底明白了
主要讲述c/c++中struct和typedef struct的区别以及各种用法
C_C++中typedef_struct和struct的用法。
typedef struct 与 struct 的区别及初始化 typedef struct 与 struct 的区别及初始化 typedef struct 与 struct 的区别及初始化
1 Writing an ANSI C++ Program 1 1.1 Getting Ready to Program....... 2 1.1 A First Program......... 3 1.2 Problem Solving: Recipes....... . 7 1.2.1 Algorithms—Being Precise...... . . 8 1.3 ...
二叉树 数据结构与数据库 C++ 作业 typedef struct BiTNode{ //定义二叉树 char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; typedef struct{ //栈 char *base; char *top; int stacksize; }...
主要介绍了C++中typedef 及其与struct的结合使用,需要的朋友可以参考下
typedef struct{ int *elem; int length; int listsize; }SqList; int Init_Sq(SqList &L){ L.elem=(int *)malloc(100*sizeof(int)); if(!L.elem) exit(-2); L.length=0; L.listsize=100; return 1; } int List...
rust-bindgen, 自动生成 Rust 和 C++ 库的FFI绑定 bindgenimpl period 已经启动 ! 请加入美国 Gitter.im 公司。bindgen 自动生成 Rust 和 C++ 库的FFI绑定。 例如给定了C 头 doggo.h:typedef struct Dog
typedef struct node { elementType data; node* next; } LList, *PList; 链表类的定义及要求如下: class linkedList { public: linkedList();//构造函数 virtual ~linkedList();//析构函数,注意要...
无 TYPEDEF 的声明方式 首先常规结构体的定义,你肯定已经十分清楚: struct Person{ int age; string name; }; 这里Person是你声明的这个结构体的名字,即一种类型,如同int之类的。 如果你想声明几个Person的...
#include<stdio.h> #include<stdlib.h> typedef int Elemtype; typedef int Status; #define OVERFLOW -2 #define OK 1 ...typedef struct Lnode { Elemtype data; struct Lnode *next; }Lnode,*LinkList;
Qt调用C\C++语言编写的动态链接库示例, #ifndef ENGINEMODEL_H #define ENGINEMODEL_H #include "macrodef.h" typedef struct inputdata { real altp; real Mach_number; real PLA; } INPUTDATA; typedef ...
typedef struct node{ int data; //用整数表示一个结点的名 struct node *LChild,*RChild; //左右指针域 }BSTNode,*BSTree; 设计算法并编写程序求解以下几个问题。 8 12 14 10 7 3 15 6 2 4 1 5 11 9 13 16 13 ...
广东高校计算机专业c++试题,( C)1. 下列 为合法的C++语言标识符。 A. const B. B-A C. _3H D. B#A ( B )2. 下列 为正确的变量说明语句。 short i=j=1; B. char ch, ch1=32; C. double: a,b; D. long float f,d;...
typedef struct City_xy //储存给定的城市数据包含序号和坐标 { int order; double x; double y; }City_xy; typedef struct City { int mark; }City; typedef struct Population { City city[145]; //城市数组 ...
typedef struct { char Condition;//到达或者离开的状态 int Arrivetime;//到达时间,默认为-1,表示没有到达 int Leavetime;//离开时间,默认为-1,表示没有离开 int License;//车牌号 } CarNode;//...
typedef struct node//定义点的结构 { int x; int y; }node; typedef struct nlist//定义点的一个集合链表存储 { struct node data; struct nlist *next; }nlist; typedef struct close//用于保留最近的两点 { ...
用c++实现学生信息的存储与调用,typedef enum SEX{ man woman}SEX; typedef struct AddressInfo{ char _name[20]; char _phone[20]; char _address[50]; int _age; SEX _sex;}AddressInfo; typedef struct ...