`
RednaxelaFX
  • 浏览: 3052852 次
  • 性别: 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++ 语言中,如果我们使用 typedef struct,例如 typedef struct Student { int a; } stu2;。那么,stu2 就是一个结构体类型,我们可以使用 stu2 来定义变量,例如 stu2 s2;。然后,我们可以访问 stu2 的成员变量...

    C_C++中typedef_struct和struct的用法

    C_C++中typedef_struct和struct的用法 在 C/C++ 中,struct 和 typedef struct 是两个常用的数据类型定义方式,它们之间有着微妙的区别。本文将详细介绍 struct 和 typedef struct 的用法,并通过实例代码演示其...

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

    在 C 和 C++ 中,有三种定义结构的方法:使用 struct 关键字、使用 typedef struct 和使用匿名结构体。使用 typedef struct 可以简化代码,提高代码的可读性。 typedef struct 是 C/C++ 语言中一个非常重要的概念,...

    typedef struct 与 struct 的区别及初始化

    在C/C++编程语言中,`typedef` 和 `struct` 是两种不同的声明结构体类型的方式,它们各有特点,但也有一定的关联。理解这两者之间的差异以及如何初始化结构体是编程中非常重要的概念。 首先,`struct` 关键字用于...

    struct和typedef struct区别

    然而,在C++语言中,不需要使用typedef关键字,直接使用struct关键字就可以定义结构体类型,例如: ```c struct Student { int a; }; ``` 这样就定义了一个结构体类型Student,我们可以直接使用Student来声明变量,...

    C++_typedef用法详解.pdf

    2. **为自定义数据类型定义简洁的类型名称**:对于结构体、联合体或枚举类型,使用`typedef`可以避免每次都需要加上`struct`或`union`等关键字,使得代码更加简洁明了。例如: ```cpp struct Point { double x; ...

    CC++中typedefstruct和struct的用法.doc

    当`struct`和`typedef`结合使用时,它们可以为结构体类型提供更方便的引用方式。 1. **`struct`定义结构体**: 在C/C++中,定义结构体的基本语法如下: ```c++ struct 结构体名 { 类型 变量名; 类型 变量名; ...

    c++运行程序缺少mex.h

    typedef struct impl_info_tag *MEX_impl_info; typedef struct mexGlobalTableEntry_Tag { const char* name; // 全局变量名 mxArray** variable; // 变量指针 } mexGlobalTableEntry, *mexGlobalTable; ...

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

    当`typedef`与`struct` 结合使用时,我们可以创建更易读且易于理解的类型名称。 1. `typedef` 的基本使用: - 类型别名:`typedef` 关键字可以为已存在的类型创建一个新的名称。例如,`typedef int size;` 创建了...

    如何理解c和c++的复杂类型声明.pdf

    在C和C++编程语言中,复杂类型声明是其语法特性的一个重要部分,尤其是在处理指针、数组、函数以及结构体等复合数据类型时。理解这些声明对于编写高效且无错误的代码至关重要。本文将深入探讨如何解析和理解C与C++中...

    dll-struct.zip

    在C++中,我们可以使用`__declspec(dllexport)`或`__declspec(dllimport)`关键字来控制函数和类是否导出或导入到DLL中。 接着,我们来看如何在DLL中定义结构体。在"C++ 调用DLL中结构体"这个场景下,我们需要在DLL...

    structtype&def_struct

    在C和C++中,`struct`的使用方式略有不同,特别是在与`typedef`关键字结合使用时。 1. `struct`定义: 在C语言中,定义一个结构体类型通常需要使用`typedef`关键字来创建一个别名,使得后续的声明更简洁。例如: ``...

    使用 typedef .docx

    `typedef` 是C++语言中一个非常有用的关键字,它允许程序员为已存在的类型创建新的别名或“同义词”。这在多个方面都能提升代码的可读性和可维护性。以下是一些关于如何有效使用 `typedef` 的关键点: 1. **创建...

    C-C++ 面试基础知识总结.pdf

    11. **struct和typedef struct**:C++中,`struct`和`class`主要区别在于默认访问权限不同,`struct`默认为public,`class`默认为private。 12. **union联合**:联合允许在相同内存空间内存储不同类型的变量,节省...

    c++typedef 应用

    在C++编程语言中,`typedef`关键字被广泛用于创建新的类型名,使得代码更加清晰易读,并且有助于减少输入错误。通过`typedef`,程序员可以为现有的数据类型或者复杂的数据结构定义一个别名,这在处理具有长名字或...

    详解C++程序中定义struct结构体的方法

    在C++编程语言中,结构体(struct)是C语言中的概念被继承过来的,它允许用户将不同的数据类型组合成一个单一的复合类型。C++中的结构体不仅可以包含不同数据类型的成员,而且可以拥有成员函数,这在C语言中是不支持的...

    C and C++ normal interview_1.doc

    `的区别在于,前者需要使用`struct x1`来声明变量,后者可以直接用`x2`。 - `struct x { ...}; x thestruct;`是正确的,如果在声明结构类型后立即声明变量,可以省略`struct`关键字。 - 结构可以包含指向自己的...

    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++数据结构实例代码.docx

    typedef struct { int *elem; int length; int listsize; } SqList; int Init_Sq(SqList &L) { // 初始化操作 } int ListInsert(SqList &L, int i, int e) { // 插入元素操作 } int ListDelete(SqList &L, ...

    c++中STRUCT的使用技巧,编程练习题。.zip

    本篇将深入探讨`struct`在C++中的使用技巧,并提供一些编程练习题以帮助你巩固理解。 1. **定义struct** 在C++中,`struct`关键字用于定义一个新的数据结构,它包含一组成员(变量或函数)。例如,定义一个表示...

Global site tag (gtag.js) - Google Analytics