【问题标题】:Defining a multi word dataype定义多字数据类型
【发布时间】:2017-11-29 09:03:05
【问题描述】:

C++ 具有诸如long long int、unsigend int 等内置类型。类型可以与限定符组合,例如const、volatile 和mutable。

为什么long long int 是一种数据类型?为什么不命名为longLongInt?多字数据类型如何工作?我可以自己定义吗?

是否可以针对自定义数据类型定义自定义限定符?

例如考虑 3D 中的线性代数向量。可以定义一个类 LinAlVector,其中包含向量的 x、y、z 分量。

如果我现在需要确保这个向量是单位向量(长度等于1),我想知道我是否可以写

isUnit LinAlVector vec(x,y,z);

其中isUnit 是影响LinAlVector 行为的修饰符(例如,如果定义了非单位向量,则会出现编译器错误)。

我知道直接面向对象的方法是从 LinAlVector 派生一个类 UnitLinAlVector。

【问题讨论】:

  • 其实是“三字”数据类型:long long int i;
  • 它们在语言中是特殊的
  • 这些多词类型是语言本身的一部分。不可能有多字通用标识符。

标签: c++ types qualifiers


【解决方案1】:

为什么long long int 是一种数据类型?为什么不叫longLongInt?

因为这是标准委员会决定的名称。选择该名称可能是因为它与 C99 中的等效数据类型名称相同。

不管怎样,如果它被命名为longLongInt,那么就必须在语言中引入一个新的关键字。这是要避免的,因为引入新关键字不向后兼容。 long long int 没有引入任何关键字,因为 long 和 int 已经是关键字。

我可以自己定义吗?

不,作为该语言的用户,您可以创建类型别名和新的类类型,但不能创建新的基本类型。

作为编译器实现者,您当然可以。

是否可以自定义限定符

不是该语言的用户。

【讨论】:

    【解决方案2】:

    long 不是类型,它是类型修饰符见http://en.cppreference.com/w/cpp/language/types

    据我所知,无法定义自定义修饰符。

    你可以做的是创建返回 bool 的成员函数 isUnit。

    【讨论】:

      【解决方案3】:

      您可以使用cstdint 中的Fixed width integer types 来确保您的类型具有您需要的宽度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-30
        • 2012-04-21
        • 1970-01-01
        • 1970-01-01
        • 2019-03-29
        • 1970-01-01
        • 2011-06-17
        • 2016-05-29
        相关资源
        最近更新 更多