`
RednaxelaFX
  • 浏览: 3022403 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

C++里用typedef struct...

    博客分类:
  • C++
阅读更多
今天要写个东西,参照的一段C++代码里看到了诡异的东西,形式类似:
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
4 楼 night_stalker 2010-06-12  
写在局部就更不污染命名空间了:

#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  
或者这样:
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这个别名的话就有问题了。

相关推荐

    c++笔记struct和typedef struct彻底明白了

    c++笔记struct和typedef struct彻底明白了

    C/C++语法知识:typedef struct 用法详解

    主要讲述c/c++中struct和typedef struct的区别以及各种用法

    C_C++中typedef_struct和struct的用法

    C_C++中typedef_struct和struct的用法。

    typedef struct 与 struct 的区别及初始化

    typedef struct 与 struct 的区别及初始化 typedef struct 与 struct 的区别及初始化 typedef struct 与 struct 的区别及初始化

    Addison.Wesley.C++.by.Dissection.2002.pdf

    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++ 作业

    二叉树 数据结构与数据库 C++ 作业 typedef struct BiTNode{ //定义二叉树 char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; typedef struct{ //栈 char *base; char *top; int stacksize; }...

    C++中typedef 及其与struct的结合使用

    主要介绍了C++中typedef 及其与struct的结合使用,需要的朋友可以参考下

    C++数据结构实例代码.pdf

    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绑定.zip

    rust-bindgen, 自动生成 Rust 和 C++ 库的FFI绑定 bindgenimpl period 已经启动 ! 请加入美国 Gitter.im 公司。bindgen 自动生成 Rust 和 C++ 库的FFI绑定。 例如给定了C 头 doggo.h:typedef struct Dog

    c++程序链表类设计.cpp

    typedef struct node { elementType data; node* next; } LList, *PList; 链表类的定义及要求如下: class linkedList { public: linkedList();//构造函数 virtual ~linkedList();//析构函数,注意要...

    C/C++中的结构体声明: struct 和 typedef struct 用法

    无 TYPEDEF 的声明方式 首先常规结构体的定义,你肯定已经十分清楚: struct Person{ int age; string name; }; 这里Person是你声明的这个结构体的名字,即一种类型,如同int之类的。 如果你想声明几个Person的...

    数据结构中链表C++源代码

    #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; 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++语言编写的动态链接库示例

    Qt调用C\C++语言编写的动态链接库示例, #ifndef ENGINEMODEL_H #define ENGINEMODEL_H #include "macrodef.h" typedef struct inputdata { real altp; real Mach_number; real PLA; } INPUTDATA; typedef ...

    C/C++:二叉排序树.rar(含完整注释)

    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++试题,( 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;...

    遗传算法解决TSP问题代码 C++

    typedef struct City_xy //储存给定的城市数据包含序号和坐标 { int order; double x; double y; }City_xy; typedef struct City { int mark; }City; typedef struct Population { City city[145]; //城市数组 ...

    C++停车场程序

    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-C++_C++_visualc++_

    用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 ...

Global site tag (gtag.js) - Google Analytics