草庐IT

pseudo-typedef

全部标签

c++ - 理解令人困惑的 typedef 语法

考虑以下代码片段typedefinttype;intmain(){type*type;//whyisitallowed?type*k;//whichtype?}我得到一个错误'k'isnotdeclaredinthisscope。编译器将type*k解析为type*和k之间的乘法。这个语法是不是很困惑?为什么C++标准允许type*type?因为语法是这样说的?为什么? 最佳答案 type*type;//whyisitallowed?C++113.3.2/1说:Thepointofdeclarationforanameisimmed

c++ - 在 C/C++ 中,是否有类似于 #ifndef 的指令用于 typedef?

如果我只想在未定义的情况下定义一个值,我会这样做:#ifndefTHING#defineTHINGOTHER_THING#endif如果THING是typedef的标识符,但没有定义怎么办?我想做这样的事情:#ifntypedefthing_typetypedefuint32_tthing_type#endif问题出现是因为我想检查外部库是否已经定义了boolean类型,但我愿意听取更通用的解决方案。 最佳答案 语言中没有这种东西,也不需要它。在单个项目中,您不应该有相同的typedef别名来引用不同的类型,因为这违反了ODR,如果

c++ - "typedef"在类型和别名标准符合之间吗?

我偶然发现了一些代码,其中typedef关键字位于类型和别名之间,例如ininttypedefINT;它在gcc和clang(liveexample)中编译。我对标准语的理解不是很好。所以我的问题是:这个标准符合吗?我可以依靠编译器来支持它吗? 最佳答案 typedef关键字在C中被归类为存储类说明符,尽管标准明确指出这是为了方便表达形式语言语法。尽管如此,typedef可以出现在与任何其他存储类说明符(例如extern或static)完全相同的位置。[C2011,6.7.1/5]事实上,该语法允许存储类说明符与声明中的类型说明符、

c++ - 你对 typedef'ing shared_ptr 的约定是什么?

我在typedef'ingboost::shared_ptr模板的命名约定之间来回切换。例如:typedefboost::shared_ptrFooPtr;在确定约定之前,我想看看其他人使用什么。你的约定是什么?编辑:对于那些将typedef嵌套在Foo中的人,Foo现在“知道”它的样子了绕过?它似乎打破了封装。这个怎么样:classFoo{public:typedefstd::vectorVector;};你现在不会这样做,对吗?:-) 最佳答案 回答:不要这样做。这对您和其他人都很方便。说出你的意思。

c++ - 如果我在 C 或 C++ 中执行 `typedef`,我什么时候应该在 typedef'ed 类型的末尾添加 `_t`?

这个问题在这里已经有了答案:C++typesuffix_t,_typeornone(4个回答)关闭4年前。我很困惑何时应该将尾随_t添加到typedef的类型?例如,我应该这样做:typedefstructimageimage_t;或者这个:typedefstructimageimage;一般规则是什么?另一个例子,我应该这样做:typdefenum{ARRAY_CLOSED,ARRAY_OPEN,ARRAY_HALFOPEN}array_type_t;或者这个:typdefenum{ARRAY_CLOSED,ARRAY_OPEN,ARRAY_HALFOPEN}array_type;请

c++ - 为什么我需要在 g++ 中使用 typedef typename 而不是 VS?

GCC已经有一段时间没有捕获我了,但它就发生在今天。但我从来不明白为什么GCC需要在模板中使用typedeftypename,而VS和我猜想ICC不需要。typedeftypename是“错误”还是过于严格的标准,还是留给编译器编写者的东西?对于那些不明白我的意思的人,这里有一个示例:templateboolfind(conststd::map&container,constKEY&key){std::map::const_iteratoriter=container.find(key);returniter!=container.end();}上面的代码在VS中编译(可能在ICC中)

c++ - typedef 的头文件最佳实践

我在一个项目中广泛使用shared_ptr和STL,这会导致类型过长、容易出错,例如shared_ptr>>(我偏爱是一名ObjC程序员,其中长名称是常态,但这仍然太多了。)我相信,始终将其称为FooListPtr会更清楚。并记录命名约定“Ptr”表示shared_ptr,“List”表示shared_ptr的vector。这很容易typedef,但它会导致标题令人头疼。我似乎有几个选项来定义FooListPtr:Foo.h.这会缠绕所有的header并造成严重的构建问题,因此它不是首发。FooFwd.h(“转发头”)。这就是EffectiveC++所建议的,基于iosfwd.h。这是

c++ - C++ 中不寻常的 typedef 使用

我在C++中发现了关键字typedef的新用法。这个typedef语句是什么意思?inttypedeffoo; 最佳答案 和这个一样typedefintfoo;即它将foo定义为int类型。虽然在这种情况下语法允许交换typedef和int,但您通常不会这样做,因为它会损害可读性。 关于c++-C++中不寻常的typedef使用,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/74

c++ - `struct X typedef` 与 `typedef struct X` 的含义是什么?

我在现有代码库中有以下(工作)代码,用于在C和C++之间共享的包含文件,在MSVC(2010)和WindowsDDK上编译:structX{USHORTx;}typedefX,*PX;还有:enumMY_ENUM{enum_item_1,enum_item_2}typedefMY_ENUM;据我所知,正确的定义应该是这样的:typedefstruct{USHORTx;}X,*PX;下面的表格有什么目的吗?我错过了什么吗? 最佳答案 事实上,typedef和typedef是否有效只是来自语言语法定义。typedef被归类为存储类说明符

c++ - 为什么 C 程序员使用 typedef 来重命名基本类型?

所以我远不是C方面的专家,但我一直在阅读的代码一直困扰着我:有人可以向我解释为什么C(++)程序员使用typedef来重命名简单类型吗?我理解你为什么将它们用于结构,但我看到的声明的确切原因是什么typedefunsignedcharuch;typedefuchUBYTE;typedefunsignedlongulg;typedefunsignedintu32;typedefsignedshorts16;这是否有一些我不清楚的优势(一个程序员,他的经验是从Java开始的,并且在严格的类型安全语言之外没有冒险过)?因为我想不出任何原因——看起来它只会让不熟悉该项目的人的代码可读性降低。请