typedef相关内容
为什么以下是合法的: typedef struct a aType;结构体{整数 x;a类型*b;}; 以及以下违法行为: void main(){typedef struct a aType;aType someVariable;结构体{整数 x;a类型*b;};} 我只是好奇,因为在每种情况下它都是前向引用,据我所知,至少对于函数和变量,前向引用是不合法的. 另外,C++ 的答案
..
这似乎可以在 MSVC 中编译甚至按预期工作.但它是合法的 C++ 代码吗?它是否能保证执行此处预期的操作(即,将模板类型导出到同名下的结构体用户)? template 结构体枚举{//CS中有两个难题:缓存失效和命名事物.typedef EnumType EnumType;}; 解决方案 我认为类型定义是不允许的. 14.6.1 本地声明的名称 (N4296) 6 模板参数不应
..
要将 my_int 声明为 int 的类型别名,我们可以这样写: typedef int my_int;//(1) 奇怪的是,以下似乎也定义了一个 int 别名: int typedef my_int;//(2) 我以前从未见过这样的语法.为什么有效? 解决方案 我阅读 C++ 参考是这样的:(1)和(2)是形式 的声明 specifiers-and-qualifiers de
..
我遇到了一些具有以下内容的 C++ 代码: typedef 请求请求; 这只是一个空操作还是这个 typedef 实际有影响,如果有,它有什么影响? 解决方案 您可以在第 7.1.3 节中阅读与 C++2003 ANSI ISO IEC 14882 2003 的 typedef 说明符相关的所有规则.在 7.1.3 中,2) 已经说过,如果名称已经指代某种类型,则允许标识 typede
..
更具体地说,为什么在许多情况下 typedef 会使用多个不同的名称,为什么 typedef 指针类型(有时会混淆逻辑)?> 例如: typedef const WCHAR *LPCWSTR, *PCWSTR; 这样做有什么意义? 解决方案 PCWSTR 和 LPCWSTR 之所以同时存在,是因为在古代是有区别的.LPCWSTR 曾经是 const WCHAR FAR *.
..
我有一个相对复杂的泛型类型(比如 Map>),我在类内部使用它.(没有外部可见性;它只是一个实现细节.)我想将其隐藏在 typedef 中,但 Java 没有这样的功能. 昨天我重新发现了以下习语,并且很失望地得知它是 被认为是一种反模式. 我的课堂{/* “伪类型定义" */私有静态类 FooBarMap 扩展了 HashMap>{ };FooBarMap[] 地图;公共 FooBarM
..
有很多教程和问题可以解决这个问题.但我想在一个具体案例中确认我的理解.下面的两个不应该对编译器产生影响,即任何一个都是正确的.对? typedef _GridLayoutInputRepeater_根据; 和 #define _base _GridLayoutInputRepeater 同样,下面的内容应该没有区别? #define INT_32 uint32_t 和 typedef
..
typedef void* TVPtr;typedef const void* CTVPtr;const TVPtr func3 (const TVPtr p){返回 p;}const void* func4 (const void* p){返回 p;}CTVPtr func5 (CTVPtr p){返回 p;}int主(){const uint64_t i = 10;func3(&i);//这
..
有没有办法在 C# 中做到这一点? 我想做类似的事情: using TypeASynonym = TypeA; 在一个地方,并且能够在多个 .cs 文件中使用 TypeASynonym 名称. 解决方案 我刚刚建议从类型继承新类型,我想为其应用同义词.并通过想要的同义词名称命名这个新类型. 好吧,这个继承技巧比什么都没有,但是!它不适用于 sealed 类型,我想为其指定
..
这是对这个问题的跟进这里.> typedef int foo;#define bar intint main() {布尔 foo = 真;//好的布尔栏 = 真;//失败} typedef 可以工作,但我很想知道这里的 typedef 是如何工作的? 关于 foo 的最终编译代码是什么样的?根据少数答案, typedef 是别名,允许对别名进行遮蔽.因此代码有效. 谁能解释一下?
..
假设我有: set>m_intset; 那行得通,但现在我将其更改为 typedef,最终得到两行代码: typedef set>SetInt;SetInt m_intset; 这样的 typedef 有什么好处?我是否正确使用它? 解决方案 使用 typedef 的一些优势: 简化:现在,每次您通常都需要 set>,你只需要输入 SetInt.如果您只使用一次集合,这没什么
..
这个类型定义: typedef DWORD WINAPI(* CM_Open_DevNode_Key)(DWORD, DWORD, DWORD, DWORD, PHKEY, DWORD); 在 BorlandCpp 中编译得很好,但是,当我在 msvc 中编译它时,我必须删除 WINAPI(这只是 __stdcall 的别名): typedef DWORD(* CM_Open_DevNode
..
是否可以使用 typedef 或 using 在概念内声明类型别名,如概念 TS 所提议的那样?如果我尝试类似下面的 MWE,代码不会编译(使用 gcc 6.2.1 和 -fconcepts 开关) #include 模板概念 bool TestConcept (){返回要求(T t){使用 V = T;std::is_integral::value;};}int main(){返回0;}
..
有一个关于 C 中 typedef 的问题. 我已经定义了结构: typedef struct Node {整数数据;结构节点 *nextptr;} 节点; 我将如何创建 typedef 指向 struct 节点的指针?? 谢谢! 解决方案 你可以同时 typedef 它们: typedef struct Node {整数数据;结构节点 *nextptr;} 节点, *n
..
在 C++11 中,是否有一种干净的方法来禁用 typedef 之间的隐式转换,或者您是否必须做一些讨厌的事情,例如将您的 int 包装在一个类中并定义和删除各种运算符? typedef int Foo;typedef int Bar;富富(1);酒吧酒吧(2);酒吧 = foo;//隐式转换! 解决方案 C++ 标准说: 7.1.3 typedef 说明符 使用 typedef
..
我知道这个问题有一个 C++ 版本,但是我使用的是标准 typedef 而不是模板. 我编写了一个可以处理 16 位 wav 文件的程序.它通过将每个样本加载到一个短片中来做到这一点.然后程序对short 执行算术运算. 我现在正在修改程序,以便它可以同时使用 16 位和 32 位 wav.我希望做一个有条件的 typedef,即对 16 位使用 short,对 32 位使用 int.
..
此声明是否符合 C99/C11 标准? typedef struct 元素 {字符*数据;结构元素*下一个;} 元素,*列表,元素[5]; 我找不到它在标准中工作的原因. 解决方案 是的,它符合标准.typedef 声明类似于普通声明,除了它们声明的标识符成为对象类型的别名,如果声明中没有 typedef. 那么一会儿 int 整数,*pointer_to_integer;
..
我有预处理器.h #define MAX_FILES 15结构预处理器{FILE fileVector[MAX_FILES];int currentFile;};typedef struct Preprocessor Prepro;void Prepro_init(Prepro* p) {(*p).currentFile = 0;} 那时我意识到我必须将声明与定义分开.所以我创建了 Prepr
..
所以,我知道您可以使用以下别名为类型设置别名: typedef int *intPtr 但是 C++ 编译器无法区分它们: typedef int footypedef int bar富 x = 5;条 y = 7;int z = x + y;//检出 我知道 C++ 没有没有这些技巧(如何使用 C++11 风格的强类型定义创建新的原始类型?),但我发现上述技巧难以阅读和理解. 我发现的
..
我有一系列具有相同原型的函数,比如说 int func1(int a, int b) {//...}int func2(int a, int b) {//...}//... 现在,我想简化它们的定义和声明.我当然可以使用这样的宏: #define SP_FUNC(name) int name(int a, int b) 但我想将其保留在 C 中,因此我尝试为此使用存储说明符 typedef
..