百科问答小站 logo
百科问答小站 font logo



为什么C++头文件喜欢把一个类型通过typedef定义出无数个新名字,这有什么意义吗? 第1页

  

user avatar   yang-leonier 网友的相关建议: 
      

C语言总共就那么十来种基本类型,如果不typedef来把不同用途的相同类型变量做区分,那么就需要在变量名/函数名上做区分,命名规则就会变得很复杂,源码就会特别长。而且在多人项目中有哪怕一人稍微违背了命名规则,都会带来很大的麻烦。

C语言是Unix的那几位创始人所创造的,他们的哲学就是尽量要简化,一个工具尽量只对应一种功能。C语言标准库函数、标准库用到的类型名称无不带着这种哲学的痕迹,甚至都不用大写字符。

至于Windows里面WORD、DWORD、QWORD、HANDLE之类为啥一定要typedef甚至用宏替换,老程序里面还有FAR、NEAR、PASCAL等特殊的关键词宏,是因为Windows当年是一个跨很多平台的操作系统,16位x86、32位x86、MIPS、PowerPC、Alpha,当然也包括后来的ARM。这些平台不仅void*的长度不同,short、long的长度也可能不同,甚至还会涉及到字节序和对齐的问题,如果是16位Windows,还涉及到源于16位x86段式内存访问方式的远指针近指针问题,回调函数调用方式也和后来的不同。

如果把一些基本类型全部用typedef或者宏定义抽象一层,在开发用户程序时就可以让用户一方在程序中减少一些与平台相关的处理,实现一套源程序能跨平台编译出尽量相同的功能。同时,还可以让一套源代码兼容多个不同的编译器工具链,编译器之间的不同之处让每个工具链的Windows API头文件作者去解决。Windows API设计者搞这样一层变量抽象,是有他们的考虑的。


user avatar   bai-ru-bing-58 网友的相关建议: 
      

typedef有的时候的作用就是告诉你,两个样式大小一样的毛巾,哪个是擦脸的,哪个是擦脚的

       virtual bool addObjects(PrunerHandle* results, const PxBounds3* bounds, const PrunerPayload* userData, PxU32 count, bool hasPruningStructure); virtual void removeObjects(const PrunerHandle* handles, PxU32 count);      

这里PrunerHandle实际上就是uint32,但是怎么对应上下文一看便知


user avatar   pansz 网友的相关建议: 
      

开局一张图,剩下全靠猜?这个没法评价。

从软件的角度虽然我能想出两三种导致这个现象的原因,但非正式发布的产品出现任何问题都是常见现象。盲人摸象的评价没有必要。

跟11代没差别,这个肯定是违背常识的,要知道11代i9只有16线程,12代i9有24线程,24线程超越16线程并不需要多么高超的优化技巧。

调度优化的主要难题是当我们只需要少量线程运作的时候究竟把这个线程安排在哪个核心。

然而,对于全核心全线程同时计算的场景来说,反正都是全核心上场,根本不需要什么优化,谁来都是全核心工作。

如果这个软件能把所有核心用满的话,没道理性能不变。所以肯定有某个环节出了问题。正式版本再说吧。


user avatar   yiwang-er-shen-23 网友的相关建议: 
      

随夫姓不局限于发达国家,但全世界都大差不差。

婚后随夫姓,确实是体现了一种从属关系。如果按今天的政治正确,尤其是按女权思想,简直不可救药。而实际上,把目光放在历史长河当中,能随夫姓简直相当于进了体制内,属于铁饭碗待遇的体现!

苏轼牛不牛?其最爱的小妾,也就是被谪至黄州[1]都没有卖掉[2]的王朝云[3],坟头上也只能写着王氏,而非苏王氏[4]

图片出自百度百科

另外,关于姓氏,咱中国还略好一些,像日本,姓氏取的那么随意,也实在是没有办法!毕竟天皇到今天还没有姓氏[5],而平民拥有姓氏也只是近150年的事情[6]。姓氏上由于太随意,留下了很多奇葩的存在,例如"一二三、我孙子、肛门、猪鼻、上床、浮気[7]、土肥"……

名字就更随意了,男娃就叫大郎、次郎、三郎,至于山本五十六[8],咱也不敢说,咱也不敢问;女娃就是花子、美子、优子、菜子……并不比我们的大柱、二牛、小凤、翠花更高雅……

欧洲也没好到哪去,别看有些人名字里带个"Von/de/Don"之类的很显洋贵,其实11世纪之前这些贵族连姓都没有[9]。至于平民,那就更好办了,要么领个教姓/名[10],要么干脆看情况起一个,比如Fisher(鱼夫),Smith(铁匠),Hunter(猎人),Johnson(约翰之子),苹果CEO cook祖上大概率是厨子……

但毫无疑问的是,家庭作为社会中最基本的利益共同体,能否成为正式的家庭成员当然是极重要的硬指标。

在长久的旧时代,宗族/家族出身是极重要的,这是不分国界的。于女性而言,几乎不可能独立生存,如果再得不到家族的实名认证,人生大都是悲惨的。如果说有所区别,大概也只是悲惨的程度和花样。

现在回归问题身本:为什么如今在很多发达国家同样以随夫姓为主流呢?

先说,我国是破了四旧[11],烧了不知多少本家/族谱,否则也不会出现争冠姓权这种事。

一方面是惯性使然。这可不只是习惯问题,更不是简单的一句"传统观念"就能解释的。这种惯性,更多的是一种力量,是利益集团的一个标致,其中并非只有男权,而是整个家族的权力征徽,更类似于一家大企业的名号,其庇护作用是显而易见的。

而平民阶层随夫姓的主要原因是效仿权贵阶层,除了自觉拿到了"皇帝的金锄头",再就是"话事人[12]"原则的体现,也就是每家每户,都要有个撑门面的最强者,而普遍上兼具暴力与理性的男性显然更适合这个位置。就普通家庭而言,其实这个位置并没有多爽,责权一体不是说着玩的!如果放在中国,这个位置就更难坐了,很多中国家庭中享有冠姓权的男性,责任与实权、收益并不成正比。

这里面还有个逻辑推导,既从妻子的角度出发“我随他姓是因为他很强,也比我强,如果反过来,他随我姓就说明我比他强,反推就是他比我弱,如果我还不如多数随夫姓的女子,那则说明我们一家子都还不如别人家最弱的那个,那就没法混了呀!”

所以,姓氏对于小家庭意义并不大,但对家庭某一成员的意义很大。且随夫姓并不见得就亏,反而很可能是赚的,无利不起早,这符合人性中的趋利特点。

那一定有人问“为什么现在很多女性/女权还要争冠姓权呢?”

答案就是:不是姓氏有问题,而是人品有问题!


以上。

参考

  1. ^ 黄冈
  2. ^ 古时候妾属于财产,更接近于随意买卖交易的财物。
  3. ^ https://baike.baidu.com/item/%E7%8E%8B%E6%9C%9D%E4%BA%91/56511
  4. ^ 了解苏轼的应该知道,确有苏王氏,既其第二任妻子王弗。
  5. ^ 日本天皇是真的没有姓氏,虽自称是天照大神的后裔,但客观反应了中古时期(公元600年)之前的日本的蛮荒程度,这与人们普遍认知的日本文化相去甚远。
  6. ^ 明治三年(公元1870年)日本政府作出“凡国民,均可起姓”的决定。可是竟然没有多少人响应,于是,政府不得不在明治八年(1875年)颂布了强制性的《苗字必称令》,规定了“凡国民,必须起姓”。
  7. ^ 意为出轨。
  8. ^ 因其出生时父亲56岁。
  9. ^ 欧洲贵族自11世纪起才普遍以封地为姓氏,之前基本有名无姓。
  10. ^ 出自于宗教典籍,或牧师之类给起的姓氏
  11. ^ 指破除旧思想、旧文化、旧风俗、旧习惯,与其后的"立四新"相对应。
  12. ^ 指在一个组织中做出决定并承担责任,同时享有最高地位的人。



  

相关话题

  c/c++语言中,如果不把声明和实现分开,而是直接一起写到头文件中,会有什么不好的影响? 
  2019 年了,Rust 到底比 C++ 强在哪里? 
  C++ 运动完上一个函数到下一个函数时,上一个函数里的变量值(结构体变量)为什么没保留住,变成零了? 
  为什么C++写视频播放器要用ffmpeg? 
  GCC 4 编译警告:warning: dereferencing type-punned pointer will break strict-aliasing rules 有什么比较好的解决办法? 
  C++函数收到一个指针T* ptr,没有其他信息,如何判断应该用delete还是delete[]? 
  C和C++的适用场合?如何创建C++实现的动态库?动态库如何保证向后兼容,即二进制兼容性? 
  LeetCode上 C++ 官方题解为什么有很多没有写delete,不会内存泄漏么?面试时也可以么? 
  有没有必要让 12 岁孩子学 C++? 
  指针是如何记住步长的? 

前一个讨论
小米移动的联通制式卡是属于移动的运营商还是属于联通的运营商?
下一个讨论
靖国神社是日本人流量很大的著名旅游景点吗?特别是外国人旅游爱去或者容易被推荐吗?





© 2024-11-25 - tinynew.org. All Rights Reserved.
© 2024-11-25 - tinynew.org. 保留所有权利