Questions tagged «data-types»

5
在C ++中为所有对象使用对象(而不是原始类型)是否有意义?
在我最近从事的项目中,我不得不使用很多看起来像这样的函数: static bool getGPS(double plane_latitude, double plane_longitude, double plane_altitude, double plane_roll, double plane_pitch, double plane_heading, double gimbal_roll, double gimbal_pitch, double gimbal_yaw, int target_x, int target_y, double zoom, int image_width_pixels, int image_height_pixels, double & Target_Latitude, double & Target_Longitude, double & Target_Height); 所以我想重构它看起来像这样: static GPSCoordinate getGPS(GPSCoordinate plane, Angle3D planeAngle, Angle3D gimbalAngle, PixelCoordinate …

4
为什么用C发明short,int和long?
我无法理解,是什么创造的确切目的short,int以及long在C数据类型? 我问的原因是,似乎它们的大小似乎没有界限-例如,它们可以是任意大小,只要short小于即可int。 那么,在哪种情况下,如果您不希望二进制兼容,则应该使用unsigned int或unsigned long而不是来代替size_t? (如果您不知道大小,那么您如何知道何时选择哪个?)
16 c  data-types 

2
代数数据类型的用途是什么?
我正在阅读有关代数数据类型的信息(感谢Richard Minerich,我对这个概念有了很好的解释)。虽然我认为我了解求和类型和乘积类型等的概念,但我不太了解的是代数数据类型在指定模式匹配之外如何有用。ADT的超出模式匹配功能还能做什么? 编辑:我不是在问开发人员可以用对象无法完成的ADT做些什么。我问是否还有ADT允许的其他操作;例如,如果使用ADT,可以对涉及的类型进行其他推理吗?如果没有它们,ADT是否可以促进某种类型的分析?

16
定义两个点的矩形背后的想法是什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 并不是说这没有道理,而是在99%的时间内效果都不好。 通常,在2D图形中,矩形是作为一对点进行初始化,存储和操作的。没有特别的语言, class Rect: p1, p2: point 将矩形定义为两个x值和两个y值更有意义,如下所示: class Rect xleft, xright: int ytop, ybottom: int 有两点,如果您想在源代码中的某个地方使用顶部的y值,则必须说rect.p1.y(hmmm,停下来想一想,是p1还是p2),但是使用四个值作为纯数据成员,就很清楚直接了:rect.ytop(无需思考!)使用两点意味着在处理垂直方向时,您必须纠结水平方向;独立元素之间存在无关紧要的关系。 两点想法是如何产生的,为什么会持续下去?它相对于裸露的x和y坐标有好处吗? 补充说明:此问题是在XY对齐矩形的背景下,例如在Windows管理器和GUI工具包中,而不是在绘图应用程序中的任意形状的背景下。

2
类型理论中的正确术语:类型,类型构造函数,种类/排序和值
在回答前一个问题时,围绕特定结构的正确术语展开了一场小型辩论。由于我没有找到一个清楚地解决这个问题的问题(除了this或that,那不是很正确的事情),因此我正在提出一个新的问题。 可疑的术语及其关系是:类型,类型构造函数,类型参数,种类或种类以及值。 我还检查了维基百科上的类型理论,但这也没有太多说明。 因此,为了获得良好的参考答案并检查我自己的理解: 这些东西如何正确定义? 这些东西之间有什么区别? 它们如何相互关联?

4
关于我的数据库日期数据类型讨论:有效吗?值得吗?还有其他人感觉到吗?
我花了很多时间在SO上回答SQL问题。我经常遇到这样的问题: SELECT * FROM person WHERE birthdate BETWEEN '01/01/2017' AND '01/03/2017' SELECT * FROM person WHERE birthdate BETWEEN '2017-01-01' AND '2017-03-01' SELECT * FROM person WHERE birthdate BETWEEN 'some string' AND 'other string' 即要么依赖给定参数从字符串到日期的隐式转换(错误),要么依赖数据库将x百万个数据库行值转换为字符串并进行字符串比较(更糟糕) 我偶尔会发表评论,尤其是如果这是一个非常有名的用户,他们编写了一个明智的答案,但是我认为,他们的数据类型确实应该少一些草率/字符串式输入 注释通常采用以下形式:如果他们使用to_date(Oracle),str_to_date(MySQL),convert(SQLSERVER)或类似的机制将字符串显式转换为日期,可能会更好: --oracle SELECT * FROM person WHERE birthdate BETWEEN TO_DATE('20170101', 'YYYYMMDD') AND TO_DATE('20170301', 'YYYYMMDD') --mysql …

6
存储三元或三态变量的最佳数据类型
免责声明:我知道数据类型有点受制于所使用的脚本/编程语言,我喜欢用Python编写;尽管我很高兴听到有关任何语言/实现的信息。 存储三态变量的最佳数据类型是什么?能够或代表积极,中立和消极的东西。 例如:整数-1,0,1。 优点:非常简洁。 Pro:可能有效,可以存储为单个2位带符号整数。 专业版:可用作刻度,例如浮点乘数。 实施例2: ,0,null(1或任何排列) 优点:非中立的用例可以是二进制的。 缺点:需要动态数据类型 缺点:可能不太简洁。 实施例3: ,+(空字符串),- 优点:非常简洁。 缺点:可以利用字符串逻辑来确定状态。 Pro ?:直观的图形表示。 也许有一些聪明的二进制逻辑可以做我什至无法想象的聪明事,也许有太多用例考虑。 另外,在调整三元状态以存储在数据库引擎中时,是否需要考虑任何因素?像Innodb供参考。

1
是否有任何值得注意的C扩展名包括其行为与机器字长无关的整数类型
与其他一些语言相比,C的一个有趣特征是它的许多数据类型基于目标体系结构的字长,而不是用绝对术语指定。虽然这允许该语言用于在某些类型可能有困难的机器上编写代码,但是这使得设计将在不同体系结构上一致运行的代码变得非常困难。考虑以下代码: uint16_t ffff16 = 0xFFFF; int64_t who_knows = ffff16 * ffff16; 在int16位(许多小型微控制器仍然适用)的体系结构上,此代码将使用定义良好的行为将值分配为1。在int64位机器上,它将再次使用定义良好的行为分配值4294836225。在int32位机器上,它可能会分配-131071的值(我不知道这是实现定义的还是未定义的行为)。即使代码只使用名义上称为“固定大小”类型的内容,该标准也要求当今使用的两种不同类型的编译器将产生两种不同的结果,而当今许多流行的编译器将产生三分之一。 这个特定的示例有些人为的,因为我不希望在现实世界的代码中将两个16位值的乘积直接分配给一个64位值,但是它被选择作为一个简短的示例来展示整数的三种方式促销可能与固定大小的无符号类型进行交互。在现实世界中,有必要根据数学整数算术规则对无符号类型的数学进行运算;在其他情况下,有必要根据模数运算的规则进行无符号类型运算;而在某些实际情况下,实际情况并非如此。没关系。诸如校验和之类的许多现实世界代码都依赖于uint32_t算术包装mod2³²,并且能够执行任意uint16_t 算术和获得的结果至少被定义为准确的mod 65536(与触发未定义行为相反)。 尽管这种情况显然似乎是不希望的(并且随着64位处理成为许多用途的规范,这种情况将变得越来越多),但据我所观察到的C标准委员会更喜欢引入已在某些著名产品中使用的语言功能。环境,而不是“从头开始”发明它们。C语言是否有任何显着扩展,这些扩展允许代码不仅指定如何存储类型,而且还指定在涉及可能晋升的场景中其应如何表现?我至少可以看到编译器扩展解决此类问题的三种方式: 通过添加一条指令,该指令将指示编译器将某些“基本”整数类型强制为一定大小。 通过添加一条指令,该指令将指示编译器评估各种升级方案,就像计算机的类型具有特定的大小一样,而与目标体系结构上类型的实际大小无关。 通过允许声明具有特定特征的类型(例如,声明一个类型应表现为mod-65536环绕的代数环,而不管其底层字长如何,并且不应隐式转换为其他类型;将a加到a wrap32上int应产生a类型的结果(wrap32无论是否int大于16位),而将a wrap32直接添加到a wrap16应该是非法的(因为两个都不能转换为另一个)。 我自己的选择是第三个选择,因为它甚至可以使具有异常字长的机器也可以使用很多代码,这些代码希望变量像“二次幂”一样“自动换行”。编译器可能必须添加位屏蔽指令以使该类型具有适当的性能,但是如果代码需要包装mod 65536的类型,则最好让编译器在需要它的机器上生成此类屏蔽,而不是使源代码杂乱无章。或者在需要掩蔽的机器上根本无法使用此类代码。我很好奇,但是,是否有任何通用扩展可以通过上述任何一种方式,或者通过我没有想到的某种方式来实现可移植的行为。 为了澄清我在找什么,有几件事;最为显着地: 尽管可以通过多种方式来编写代码,以确保所需的语义(例如,定义宏以对特定大小的无符号操作数执行数学运算,以产生明确包装或不包装的结果),或至少防止不希望的情况语义(例如,有条件地定义一个类型wrap32_t是uint32_t在编译器,其中一个uint32_t也不会得到提升,而这一数字是更好地为需要的代码wrap32_t到一些机器上该类型将得到提升,而不是有它运行并产生虚假行为失败编译)如果有任何一种编写代码的方式对将来的语言扩展最有利,那么使用该方式将比设计自己的方法更好。 对于如何扩展语言以解决许多整数大小的问题,我有一些很扎实的想法,允许代码在具有不同字长的机器上产生相同的语义,但是在我花大量时间编写它们之前,我想知道已经朝这个方向做了什么努力。 绝不希望我鄙视C标准委员会或他们所做的工作;但是,我希望在几年后,有必要使代码在“自然”升级类型为32位以及64位的计算机上正确工作。我认为,对语言进行一些适度的扩展(比C99 nnd C14之间的许多其他更改更适度),不仅可以提供一种有效使用64位体系结构的简洁方法,而且在讨价还价中还可以促进与该标准历来向后弯腰以支持“不寻常字长”的机器(例如,使具有12位的机器char可以运行期望uint32_t包装mod2³²]。根据未来扩展的方向,我还希望可以定义宏,这些宏将使今天编写的代码可在默认整数类型表现为“预期”的当今编译器上使用,也可在未来整数使用的编译器上使用类型将默认具有不同的行为,但是在哪里可以提供所需的行为。

1
有什么直觉可以支持在Haskell中将Maybe构造函数称为“ Just”?
像这样的可选类型的直觉Maybe Int是:要么没有 Int(因此Nothing存在),要么有一些 Int。那里有东西。 对我来说,我们将类型构造器称为“负数”情况是有意义的Nothing,因为这恰好意味着-那里没有Int。但是,为什么在重点在于实际存在的东西的情况下使用“ 只是 ”一词呢? 对我来说,“ Just”一词的含义是它所描述的事物少于替代事物。与实际存在的事物相反 例如, 你今晚有事吗? B:没有;我只是待在家里看电视。 答:您是否调查过房屋周围令人毛骨悚然的鬼声? B:是的,事实证明它实际上只是一只猫头鹰。 显然,我缺乏这种命名选择所基于的直觉。它是什么?因为对我来说,Just字样与它在Maybe类型中的用法相反。

3
将接口用于数据类型是否是反模式?
假设我的模型中有多个实体(使用EF),例如用户,产品,发票和订单。 我正在编写一个用户控件,该控件可以在我的应用程序中打印实体对象的摘要,其中这些实体属于预先确定的集合,在这种情况下,我说可以概括用户和产品的摘要。 这些摘要都只有一个ID和一个描述,因此我为此创建了一个简单的接口: public interface ISummarizableEntity { public string ID { get; } public string Description { get; } } 然后,对于有问题的实体,我创建一个实现此接口的局部类: public partial class User : ISummarizableEntity { public string ID { get{ return UserID.ToString(); } } public string Description { get{ return String.Format("{0} {1} is from {2} and is …

4
整数是否过多用作数据类型?
大多数应用程序开发人员是否在真正要使用无符号整数的地方使用有符号整数?我一直在做,我的同事也在做。我没有看到很多其他广泛的代码库(Delphi VCL除外),并且互联网上的示例通常使用整数。VCL开发人员使用自己的数据类型(这是声明变量的最懒惰的方式)。 像这样的代码似乎有些可怕 TStuffRec = record recordID : Integer; thingID : Integer; otherThingID : Integer; end; 什么时候可以写成 TStuffRec = record recordID : Cardinal; thingID : Cardinal; otherThingID : Cardinal; end; 从功能上讲,这些记录几乎总是相同的(并且希望即使在64位Delphi中也将继续相同)。但是非常多的人会遇到转化问题。 但是使用无符号整数也有缺点。主要是因为将两者混在一起是多么烦人。 真正的问题是,这是否是实际上已被考虑或纳入最佳实践的东西?通常只取决于开发人员吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.