首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++错误: Todd Veldhuizen的TMP图灵完整性证明中需要嵌套名称说明符

C++错误: Todd Veldhuizen的TMP图灵完整性证明中需要嵌套名称说明符

在C++中,TMP(Template Metaprogramming,模板元编程)是一种利用C++模板系统进行编程的技术。Todd Veldhuizen是TMP的先驱之一,他提出了一种TMP图灵完整性证明的方法。

在TMP图灵完整性证明中,嵌套名称说明符是指在模板元编程中使用的一种语法结构,用于访问嵌套的类型或值。它可以通过使用模板特化和递归等技术来实现复杂的计算。

嵌套名称说明符的语法形式为typename OuterType::InnerTypeOuterType::InnerValue,其中OuterType是外部类型,InnerType是内部类型,InnerValue是内部值。通过使用嵌套名称说明符,可以在模板元编程中访问嵌套的类型或值,实现更加灵活和复杂的计算。

TMP图灵完整性证明中需要嵌套名称说明符的原因是,它提供了一种在模板元编程中组织和访问类型或值的方式,使得可以进行更加复杂的计算。通过使用嵌套名称说明符,可以实现递归、条件判断、循环等控制结构,从而实现图灵完整性。

在实际应用中,嵌套名称说明符在模板元编程中起到了重要的作用。它可以用于实现各种算法、数据结构、编译时计算等功能。例如,可以使用嵌套名称说明符来实现类型列表、类型转换、编译时条件判断等。

腾讯云提供了丰富的云计算产品和服务,包括计算、存储、数据库、人工智能等方面的解决方案。对于C++开发者来说,腾讯云的云服务器(CVM)和云函数(SCF)等产品可以提供稳定可靠的计算资源,用于部署和运行C++程序。此外,腾讯云还提供了云数据库(TencentDB)和对象存储(COS)等产品,用于存储和管理数据。

更多关于腾讯云产品的详细信息和介绍,您可以访问腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

两万字长文,见过最好的模板元编程文章!

一个重要的理论结论就是:C++ 模板是图灵完备的(Turing-complete),其证明过程请见文献[8](就是用 C++ 模板模拟图灵机),理论上说 C++ 模板可以执行任何计算任务,但实际上因为模板是编译期计算...C++ 模板的特例化提供了条件判断能力,而模板递归嵌套提供了循环的能力,这两点使得其具有和普通语言一样通用的能力(图灵完备性)。...template; C++ 模板是图灵完备的,模板编程是函数编程风格,特点是:没有可变的存储、递归,以“”为输入,typedef 或静态常量为输出; 编译期数值计算虽然实际意义不大,但可以很好证明...,Todd Veldhuizen,1995(archive.org 保存 Todd Veldhuizen 主页,可能限制访问,在线 PS 文件转 PDF 文件网站); Expression Templates...,Todd Veldhuizen,1995; C++ Templates as Partial Evaluation,Todd Veldhuizen,1999; Erwin Unruh 写的第一个模板元编程程序

1.4K10

浅谈 C++ 元编程

1995 年的 Todd Veldhuizen 在 C++ Report 上,首次提出了 C++ 模板元编程 的概念,并指出了其在数值计算上的应用前景。...但是 C++ 中提供的模板是 图灵完备 (turing complete) 的,所以可以使用模板实现完整的元编程。...isBad, "neither Num nor Str"); } 代码编译时测试类型的错误用法 代码中的错误在于:编译代码的函数 ToString 时,对于给定的类型 T,需要进行两次函数绑定 —...最早的有关元编程 优化表达式计算 的思路是 Todd Veldhuizen 提出的。利用表达式模板,可以实现部分求值、惰性求值、表达式化简等特性。...Primzahlen Original [EB/OL] http://www.erwin-unruh.de/primorig.html [using-cpp-tmp]: Todd Veldhuizen.

3.1K61
  • C++模版的本质

    最初C++是没有标准库的,任何一门语言的发展都需要标准库的支持,为了让C++更强大,更方便使用,Bjarne Stroustrup觉得需要给C++提供一个标准库,但标准库设计需要一套统一机制来定义各种通用的容器...(数据结构)和算法,并且能很好在一起配合,这就需要它们既要相对的独立,又要操作接口保持统一,而且能够很容易被别人使用(用到实际类中),同时又要保证开销尽量小(性能要好)。...(模板备选集合)中一个一个匹配,找到最优匹配的模板定义, Failure:在模板集中,单个匹配失败; Error:在模板集中,所有的匹配失败; 所以单个匹配失败,不能报错误,只有所有的匹配都失败了才报错误...TMP通过模板实现一套“新的语言”(条件,递归,初始化,变量等),由于模板是图灵完备,理论上可以实现任何可计算编程,把本来在运行期实现部分功能可以移到编译期实现,节省运行时开销,比如进行循环展开,量纲分析等...C++ Templates are Turing Complete,Todd L.

    1.7K30

    Epic 新语言 Verse 介绍

    我们知道,UE 本身使用 C++ 开发,也允许使用 C++ 来对引擎进行扩展,在引擎内部也提供了蓝图作为官方的可视化编程语言。...在 Verse 中,这样的代码是编译不过的: Arr := array{1, 2, 3} Element := Arr[0] Log(Element) 编译错误提示为(这个错误提示略显诡异,下一节会说明...从直观来看,能更好地将错误处理融入到正常的程序执行过程中,但这似乎也使得我们很难在一个地方统一处理错误,语言提供的统一操作只有 option 用于表示一个值有没有,具体这个方案能力是否足够可能还需要再多使用后再做评价...,例如 标注一个函数是异步的 实现说明符,例如 说明符表示对应 API 是 C++ 实现的 作用说明符本身又被分为两种: 独占说明符:可以存在一个或不存在,如果不存在...或者更复杂的情况,涉及到分布式的场景如何处理?例如我需要写两个文件,第一个文件写成功,第二个文件写失败,此时可能开发者还是希望有一个判定错误内容并进行错误处理的方法。

    1.6K30

    一文入魂:妈妈再也不用担心我不懂C++移动语义了!

    最终内存中的数据如图所示: 现在问题来了,tmp对象在被添加到容器中2次之后,就不需要了,也就是说,它的生命期即将结束。...那么聪明的你一定想到了,既然tmp对象不再需要了,那么第2次将其添加到容器中的操作是不是就可以不执行拷贝操作了,而是让容器直接取tmp对象的数据继续用。没错,这时,就需要移动语义帅气登场了!...(); // 编译错误:attempting to reference a deleted function 在之后的介绍中,我们需要关注到的点是在特定情况下,编译器会将移动构造函数和移动赋值运算符定义为...(二)为移动语义使用noexcept说明符 在了解了以上的规则后,我们就清楚了,要想使用移动构造函数来将老的元素放到新的内存中,我们就需要告知编译器,我们的移动构造函数不会抛出异常,可以放心使用,这就是通过...六、总结 本文向您阐述了C++中的移动语义,从缘由、定义到实现,以及其他的一些相关细节内容。相信您在看完本文后对C++的移动语义会有更加全面而深刻的认识,可以向妈妈汇报了!

    1.3K20

    c++模板:调用模板成员函数需不需要加template关键字?

    以下是个简单的模板类测试代码,模板类A中定义了模板函数hello,在模板函数test中调用A::hello template_test.cpp template struct A{...同样是模板成员函数,hello2因为调用时不需要指定显式模板参数,不加template关键字也可以被编译正确识别。...如下是C++标准中的说明(《14.2 Names of template specializations》): 当类的模板成员名称出现在 ....或 -> 在后缀表达式中,或在限定标识符中的嵌套名称说明符之后,并且后缀表达式或限定标识符显式依赖于模板参数(14.6.2),成员模板名称必须是以template关键字为前缀。...以下是从C++标准文档(《Working Draft, Standard for Programming Language C++》 )摘录的14.2原文 那么为什么MSVC就不需要tempate

    1K30

    Visual C++ 中的重大更改

    当你升级到 Visual C++ 编译器的新版本后,可能会在之前编译并正常运行的代码中遇到编译和/或运行时错误。...新版本中会引起这类问题的更改称为重大更改,通常,修改 C++ 语言标准、函数签名或内存中的对象布局时需要进行这种更改。     ...根据标准,可变说明符仅可应用于类数据成员的名称,不能应用于声明为 const 或 static 的名称,也不能应用于引用成员。...以下代码在 Visual Studio 2013 中的 Visual C++中成功编译,但在 Visual Studio 2015 中的 Visual C++ 中产生错误。           ...在 C++ 中,考虑名称解析的候选对象时,可能会出现作为潜在匹配项考虑的一个或多个名称生成无效的模板实例化的情况。

    5.3K10

    CC++ 之 C发展史及 各标准特性说明

    参考链接: C++ c16rtomb() Tips:  1. 本人当初学习C/C++的记录。  2. 资源很多都是来自网上的,如有版权请及时告知!  3. 可能会有些错误。...当一个类似结构的东西需要临时构造的时候,可以用 (type_name){.numberN=valueN, .numberK=valueK,…} 这有点像 C++ 的构造函数初始化结构的时候现在可以这样写...C99标准规定,可以省略函数原型中的名称,但是如果省略名称,则需要用星号来代替省略的维数: int sum2d(int , int, int ar[*][*]); // 只能用在函数声明中  数组声明中的类型修饰符...## 其它特性的改动  1.放宽的转换限制  限制C89标准C99标准数据块的嵌套层数15127条件语句的嵌套层数863内部标识符中的有效字符个数3163外部标识符中的有效字符个数631结构或联合中的成员个数...1271023函数调用中的参数个数31127 不再支持隐含式的int规则 每个声明中的声明说明符中应至少指定一个类型说明符,现在不支持没有类型就默认是int的声明语句。

    95000

    Visual C++ 中的重大更改

    当你升级到 Visual C++ 编译器的新版本后,可能会在之前编译并正常运行的代码中遇到编译和/或运行时错误。...新版本中会引起这类问题的更改称为重大更改,通常,修改 C++ 语言标准、函数签名或内存中的对象布局时需要进行这种更改。     ...根据标准,可变说明符仅可应用于类数据成员的名称,不能应用于声明为 const 或 static 的名称,也不能应用于引用成员。...以下代码在 Visual Studio 2013 中的 Visual C++中成功编译,但在 Visual Studio 2015 中的 Visual C++ 中产生错误。           ...在 C++ 中,考虑名称解析的候选对象时,可能会出现作为潜在匹配项考虑的一个或多个名称生成无效的模板实例化的情况。

    4.8K00

    【笔记】《Effective C++》条款26-55

    , 令用户只修改核心部分, 但利用总的接口来使用 NVI手法需要允许用户修改私有的虚函数, 这恰好是C++中"派生类可以重新定义继承来的私有虚函数, 因为继承而来的虚函数与基类无关"这个特性的应用 当派生类需要使用基类的一些内容时虚函数也会被写为..., 只和重载一样和名称与参数有关, 所以很容易二义 更复杂的情况是下图的"菱形继承": 菱形继承中, 对于不同基类都拥有的同名成员, C++默认会复制多份以供使用, 如果不希望复制就应该使用虚继承,...当这个名称还处于模板类中时, 称为嵌套从属名称(nested dependent names)...., 编译器才会开始编译 当然如果传入参数有误编译器依然会报错 任何时候想要在模板中使用一个嵌套从属名称时都需要以上处理, 包括参数列中....TMP的缺点是需要付出长得多的编译时间 TMP已经被证明是图灵完备的, 因此可以用来实现一切可计算的任务 TMP的语法非常怪异, 核心三点写法如下: 变量: 使用前面 条款2 提到的使用enum来实现编译期常数定义的方法得到

    93330

    C++ 模板元编程简介

    一个重要的理论结论就是:C++ 模板是图灵完备的(Turing-complete),就是用 C++ 模板可以模拟图灵机。...理论上说 C++ 模板可以执行任何计算任务,但实际上因为模板是编译期计算,其能力受到具体编译器实现的限制(如递归嵌套深度,C++11 要求至少 1024,C++98 要求至少 17)。...C++ 模板是图灵完备的,这使得 C++代码存在两层次,其中,执行编译计算的代码称为静态代码(static code),执行运行期计算的代码称为动态代码(dynamic code),C++的静态代码由模板实现...3.模板元编程的组成要素 从编程范式上来说,C++模板元编程是函数式编程,用递归形式实现循环结构的功能,用C++ 模板的特例化提供了条件判断能力,这两点使得其具有和普通语言一样通用的能力(图灵完备性)。...4.模板元编程的控制逻辑 第一个 C++ 模板元程序由Erwin Unruh 在 1994 年编写,这个程序计算小于给定数 N 的全部素数(又叫质数),程序并不运行(都不能通过编译),而是让编译器在错误信息中显示结果

    6.9K42

    【C++ 类和对象 基础篇】—— 抽象思维的巅峰舞者,演绎代码的深邃华尔兹

    1、类 1.1、类的定义 在 C++ 中,类 是面向对象编程的核心概念之一。它是一种用户定义的数据类型,用于描述一组具有相同特性(属性)和行为(方法)的对象。...,用于防止名称冲突。...对外提供接口:通过方法访问或修改内部数据,保证对象状态的完整性和安全性。...C++中数据和函数都封装到了类里面,通过访问限定符进行了、限制,不能再随意通过对象直接访问数据,这是C++封装的⼀种体现,这个是最重要的变化。...数据和操作是分开的,封装性较差。 需要显式传递结构体指针,操作数据。 C++: 提供类(class) 和 对象 的概念,将数据和行为封装在一起。

    42410

    现代C++之字面量、静态断言和成员函数说明符

    现代C++之字面量、静态断言和成员函数说明符 学习自:极客时间现代C++!...,C++ 有一些规则决定是否生成默认的特殊成员函数。...这两个说明符可以单个或组合使用,都是加在类成员函数声明的尾部。 (1)override 功能: 显式声明了成员函数是一个虚函数且覆盖了基类中的该函数。...如果有 override 声明的函数不是虚函数,或基类中不存在这个虚函数,编译器会报告错误。...作用: 给开发人员更明确的提示,这个函数覆写了基类的成员函数; 让编译器进行额外的检查,防止程序员由于拼写错误或代码改动没有让基类和派生类中的成员函数名称完全一致。

    1.9K10

    【笔记】《C++Primer》—— 第18章:用于大型程序的工具

    18.1 异常处理 在之前5.6的时候简单提到过异常处理,当时只大概介绍了如何使用C++的异常处理部分,这一节更深入地介绍了异常处理时的细节 异常处理的流程是:在C++中我们throw了一个表达式后会...要注意每次在try框内throw的时候,throw后面的剩余语句将不会再执行,程序的控制权会转移到成功catch的模块内,这个catch可能在同个函数中也可能是在外层调用链的嵌套中 因此要注意出现异常的时候函数可能会提早退出...18.2 命名空间 命名空间要解决的问题是大型程序中名字相互冲突的问题,通过让不同程序的名称放在不同的命名空间中,然后通过命名空间来特指所需要的名称来减少名称冲突 每个命名空间都是一个作用域,一个命名空间由关键字...命名空间的特点是命名空间可以嵌套定义,使用方法和嵌套类差不多,但是注意命名空间不能放在函数或类的内部 命名空间可以分布式定义,也就是可以被定义在不同的文件中,但是此时要注意命名空间有声明顺序的问题,只能使用已经被编译器获得到的名称...,如果我们直接调用函数传递派生类对象进去,会产生二义性错误,需要用特质来解决 和单继承时一样,静态类型决定了我们能调用那些成员 在多继承的时候,名称查找会在所有直接基类中同时进行,单个继承链上才有顺序,

    1K20

    C++为什么有参数依赖查找(ADL)?

    c 代码解读复制代码// 要访问被隐藏的类型名称,你必须使用详细类型说明符(elaborated type specifier)。这通常涉及到使用作用域运算符::来指定完整的类型名称。...类定义:在类定义中的任何位置使用名称时,会搜索类定义本身、其基类、嵌套类的定义等 类体内查找:如果在类定义中使用了一个名称,首先会在该类的定义范围内查找,直到使用该名称的位置。...嵌套类查找:如果当前类是嵌套在另一个类中的,查找会扩展到包含这个嵌套类的外部类的定义中。同时,也会查找外部类的所有基类。...历史原因:ADL是C++早期版本中就已经存在的特性,它随着语言的发展而逐渐演化,成为C++中不可或缺的一部分。...参考引用 关于"在C++中确定一个名称"这一相关话题,本文仍有一些未提及的场景,比如模板参数推导、重载解析等,可以参考:

    12110

    UE4 常见的宏UFUNCTION-函数说明符

    函数说明符: BlueprintAuthorityOnly  如果在具有网络权限的计算机(服务器,专用服务器或单人游戏)上运行,此功能只能从Blueprint代码执行,如无网络权限,则该函数将不会从蓝图代码中执行...这个说明符意味着BlueprintCallable BlueprintImplementableEvent  此函数可以在蓝图或关卡蓝图图表内进行重载  不能修饰private级别的函数,函数在C+...提供一个名称为[FunctionName]_Implementation的函数本体而非[FunctionName];自动生成的代码将包含转换程序,此程序在需要时会调用实施方式 // .h文件中的声明...提供一个名称为[FunctionName]_Implementation的函数主体,而不是[FunctionName]; 自动生成的代码将包含一个转换程序来在需要时调用实现方法 CustomThunk ...提供一个名称为[FunctionName]_Implementation的函数主体,而不是[FunctionName]; 自动生成的代码将包含一个转换程序来在需要时调用实现方法 WithValidation

    2.5K20

    文本去重的技术方案讨论(一)

    1.传统签名算法与文本完整性判断 一、传统签名算法与文本完整性判断 问题抛出: (1)运维上线一个bin文件,将文件分发到4台线上机器上,如何判断bin文件全部是一致的?...看到这里估计大家就明白了,我们使用的simhash就算把文章中的字符串变成 01 串也还是可以用于计算相似度的,而传统的hashcode却不行。...在simhash的发明人Charikar的论文中并没有给出具体的simhash算法和证明,量子图灵”得出的证明simhash是由随机超平面hash算法演变而来的。...下面是关于【海明距离】 二进制串A 和 二进制串B 的海明距离 就是 A xor B 后二进制中1的个数。...如果使用距离为3,短文本大量重复信息不会被过滤,如果使用距离为10,长文本的错误率也非常高,如何解决?

    1.5K30

    C++:Lambda表达式

    嵌套 Lambda 表达式 1. 匿名函数概念 在计算机编程中,匿名函数(英语:anonymous function)是指一类无需定义标识符(函数名)的函数或子程序,普遍存在于多种编程语言中。...3.1.1 引用捕获 使用引用捕获一个外部变量,只需要在捕获列表变量前面加引用说明符 & 即可,如果捕获列表只有一个 引用说明符但没有变量名称,则表示可以引用访问所有其可以访问到的变量。...Now, the total number of sutdents is: 21 3.1.2 值捕获 使用值捕获一个外部变量,只需要在捕获列表变量前面加一个等号 = 即可,如果捕获列表只有一个等号但没有变量名称...示例3.1.2 中在 lambda 函数体内对值捕获的外部变量进行修改会提示错误,我们可以通过加入 mutable 关键字来解决。...嵌套 Lambda 表达式 Lambda 表达式可以嵌套以实现复杂的应用场景。

    2.2K31

    C++:Lambda表达式

    嵌套 Lambda 表达式 1. 匿名函数概念 在计算机编程中,匿名函数(英语:anonymous function)是指一类无需定义标识符(函数名)的函数或子程序,普遍存在于多种编程语言中。...3.1.1 引用捕获 使用引用捕获一个外部变量,只需要在捕获列表变量前面加引用说明符 & 即可,如果捕获列表只有一个 引用说明符但没有变量名称,则表示可以引用访问所有其可以访问到的变量。...Now, the total number of sutdents is: 21 3.1.2 值捕获 使用值捕获一个外部变量,只需要在捕获列表变量前面加一个等号 = 即可,如果捕获列表只有一个等号但没有变量名称...示例3.1.2 中在 lambda 函数体内对值捕获的外部变量进行修改会提示错误,我们可以通过加入 mutable 关键字来解决。...嵌套 Lambda 表达式 Lambda 表达式可以嵌套以实现复杂的应用场景。

    1.1K52
    领券