Types 如何解决与常量/非常量类型的绑定?

Types 如何解决与常量/非常量类型的绑定?,types,compiler-construction,mutable,Types,Compiler Construction,Mutable,这个问题是关于编译器内部的 考虑一种语言,如C++或D,它具有“代码> const 类型的概念。例如,我们可以写: const Foo a = ...; // a is of type "const Foo" Foo b = ...; 我感兴趣的是绑定到一个类型——它是如何完成的 现在我只能考虑(为疯狂的业余想法感到抱歉)——将整个类型树加倍,为每个类型T创建其常量双胞胎,并将其作为父类。另一种方法是像往常一样绑定(与没有这种区别的语言一样),但是无论绑定本身是否用于const类型,都会使绑定

这个问题是关于编译器内部的

考虑一种语言,如C++或D,它具有“代码> const <代码>类型的概念。例如,我们可以写:

const Foo a = ...; // a is of type "const Foo"
Foo b = ...;
我感兴趣的是绑定到一个类型——它是如何完成的

现在我只能考虑(为疯狂的业余想法感到抱歉)——将整个类型树加倍,为每个类型
T
创建其常量双胞胎,并将其作为父类。另一种方法是像往常一样绑定(与没有这种区别的语言一样),但是无论绑定本身是否用于
const
类型,都会使绑定更丰富地包含信息


但是它是如何真正解决的呢?

我不是这方面的专家,但我要说的是
const
是声明的一个属性,而不是该类型的属性。@GerardvanHelden,我不确定我是否明白,你可以在代码
a
的某个地方看到,你如何获得关于该类型的类型信息?例如,考虑第三行<代码> b= a;<代码>。这取决于您认为编译器在这种情况下应该做什么。“a”是常量,还是“a”是常量类型,因此b现在也是隐式常量?这是一个错误,还是意味着一个值拷贝?@GerardvanHelden,这里我是针对非/const类型的。所以
a
是常量类型。我问的是,当
b=a时,绑定将如何为行工作
。我不是这方面的专家,但我想说,
常量是声明的一个属性,而不是该类型的属性。@GerardvanHelden,我不确定我是否理解,你可以在code
a
中看到,你如何获得关于该类型的类型信息?例如,考虑第三行<代码> b= a;<代码>。这取决于您认为编译器在这种情况下应该做什么。“a”是常量,还是“a”是常量类型,因此b现在也是隐式常量?这是一个错误,还是意味着一个值拷贝?@GerardvanHelden,这里我是针对非/const类型的。所以
a
是常量类型。我问的是,当
b=a时,绑定将如何为行工作