C++c语言*=什么意思?

C++的i^=j这句话是什么意思?_百度知道
C++的i^=j这句话是什么意思?
提问者采纳
i = i畅处扳肺殖镀帮僧爆吉 ^ j^是位运算符二进制数:1^0=10^1=10^0=01^1=1
提问者评价
明白了,谢谢啊!!
其他类似问题
为您推荐:
其他1条回答
这句话相当于i=i^j;^是位运算符
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C++是什么意思?
C++是什么意思?
09-07-03 & 发布
C++,C语言这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。  美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)博士在20世纪80年代初期发明并实现了C++(最初这种语言被称作“C with Classes”)。一开始C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常(exception)、RTTI、名字空间(name space)逐渐被加入标准。1998年国际标准组织(ISO)颁布了C++程序设计语言的国际标准ISO/IEC 。C++是具有国际标准的编程语言,通常称作ANSI/ISO C++。1998年是C++标准委员会成立的第一年,以后每5年视实际需要更新一次标准,下一次标准更新将是在2009年,目前我们一般称该标准C++0x。遗憾的是,由于C++语言过于复杂,以及他经历了长年的演变,直到现在(2004年)只有少数几个编译器完全符合这个标准(这么说也是不完全正确的,事实上,至今为止没有任何一款编译器完全支持ISO C++)。  另外,就目前学习C++而言,可以认为他是一门独立的语言;他并不依赖C语言,我们可以完全不学C语言,而直接学习C++。根据《C++编程思想》(Thinking in C++)一书所评述的,C++与C的效率往往相差在正负5%之间。所以有人认为在大多数场合C++ 完全可以取代C语言(然而我们在单片机等需要谨慎利用空间、直接操作硬件的地方还是要使用C语言)。就是一种编程语言
请登录后再发表评论!C++中z = x&y ? x :是什么意思_百度知道
C++中z = x&y ? x :是什么意思
y)z=x,如果x&gt,整个表达式根据条件返回不同的值,如果为假则返回y:是三元运算符;elsez=y。相当于:if(x&gt,之后=赋值给z;y为真则返回x?
其他类似问题
为您推荐:
其他4条回答
y ?y :的表达式值为x, x&gt, x&gt,如果为假: y如果x&gt?y为真
就是比较x和y的大小z是其中大的那个。。
固定的表达,就是把x、y中较大的附给z,谢谢、至于为什么是这样表达,有待你的品味,好好学C
,努力吧!
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C++关键字_百度百科
关闭特色百科用户权威合作手机百科
收藏 查看&C++关键字
关键字(keyword)又称,是整个语言范围内预先保留的标识符。每个C++关键字都有特殊的含义。经过预处理后,关键字从预处理记号(preprocessing-token)中区出来,剩下的作为(token),用于声明对象、函数、、等。不能声明与关键字同名的标识符。外文名C++ keywords专&&&&业程序设计
各个版本的ISO C++都规定以下划线接大写字母或下划线起始的标识符保留给实现,可以用这些保留标识符作为扩展关键字,这不保证可移植性。ISO C++98/03关键字共63个,此处严格按标准原文排版:
dynamic_cast
static_cast
const_cast
  delete
reinterpret_cast
  [1-2]C++11 关键字共73个。
新增关键字:alignas、alignof、char16_t、char32_t、constexpr、decltype、noexcept、nullptr、static_assert、thread_local。[3]
auto 的意义改变。[4]
register 被视为过时的(可能在未来标准移除)。[5]
export 因为实现支持太少(仅Edison Design Group的前端支持),编译效率低下,取消原有意义(仍是关键字,但使用它的程序是错误的),改为保留给未来标准使用。[3]alignof用于获取取指定表达式指定的(类似sizeof,可以直接是类型名)的对齐(alignment)。alignas用于声明时指定对齐类似于现有的类型。和sizeof类似,两者的操作数都不被求值。类似const但更强大,修饰函数或对象,表示函数结果或对象是编译时决定的常量,以便优化。(const不能修饰一般的函数,也不一定指定声明的对象能编译期的常量表达式,更可能只是只读对象。而在C语言中,const完全只能指定只读对象。)二者分别表示16位字符型和32位字符型,类似char和wchar_t,也是一般只专用于表示字符的整数类型,且设计上用于表示字符。char16_t和char32_t是C++11新增的,以克服wchar_t在不同平台上无法保证确定宽度的缺点。用于编译时推断类型。此外参与函数声明的另一种语法:指定返回auto,同时decltype引导trailing-return-type指定实际应该返回类型。decltype的操作数也不被求值。字面量nullptr是具有std::nullptr_t类型的右值,是空指针常量。C++98/03中表示空指针常量的NULL或0都会在重载中引起混淆,而纯库的解决方案在这里也遇到困难,所以有必要加入新的关键字来专门表示空指针。实践表明动态异常规范会影响运行时性能。新增的noexcept表示静态异常规范,只指定函数(模版)是否有异常抛出,这里noexcept即noexcept(true),表示没有异常抛出。除了异常规范,noexcept可以作用于一个表达式来判断是否有异常,这对于模版代码非常有用。用于编译时的静态断言:若指定的表达式为false则编译失败。C++11标准和C++98/03标准的auto是不同的。C++98/03标准中,auto表示自动储存类型[6];C++11标准中,auto表示由编译器静态判断其应有的类型[4]。用于语法:
asm-definition:  asm ( string-literal ) ;
意义由实现定义,典型实现中传输其中的字符串给。在C++98/03中这个这个关键字用于声明块中的变量的生存期为自动生存期,若是对象同时具有自动存储类,即生存期在块结束时结束。这样的变量被称为。这个关键字不常用,因为即便省略,声明的默认就是auto的。[6]
在C++11中,auto的含义改变为自动通过初值符推断声明的类型占位符。如声明auto i = 1;,auto就相当于int,因为1是int类型,可以推断出i的类型。也可以使用auto& i等声明,具体推导规则同模版参数类型推导。[4]即const_cast、dynamic_cast、reinterpret_cast、static_cast。
C++风格的类型转换。dynamic_cast是动态的,需要运行时支持;其它都是静态检查,相比C风格的类型转换更加细化,增强了类型安全性。bool即,属于基本类型中的整数类型,取值为真和假。true和false是具有bool类型的,是,分别表示真和假。break用于跳出for或while循环或switch。continue用于跳转到循环起始。goto用于无条件跳转到函数内的标号。较少使用goto,更多使用循环代替。switch分支语句的起始,根据switch条件跳转到case标号或defalut标记的分支上。用于。try指定try块的起始,try块后的catch可以捕获异常。异常由throw抛出。throw在函数中还表示动态异常规范,但在C++11中被标记为过时(由noexcept部分取代)。表示型和宽字符型这些整数类型(属于基本类型),但一般只专用于表示字符。char(和signed char、unsigned char一起)事实上定义了字节的大小。const和volatile是类型修饰符,语法类似,在C++中合称为cv-限定符(cv-qualifier)。可以共同使用。用于变量或函数参数声明,也可以限制非静态成员函数。const表示只读类型(指定类型安全性,保护对象不被意外修改),volatie指定被修饰的对象类型的读操作是副作用(因此读取不能被随便优化合并,适合映射I/O寄存器等)。用于类型声明。class是一般的类类型。struct在C++中是特殊的类类型,声明中仅默认的成员和基类访问限定与class不同(struct是public,class是private)。union是联合体类型。满足特定条件类类型——POD struct或POD union可以和中的struct和union对应兼容。
class还有个用途是在模版类型声明中作为表示模版类型参数或模版模版参数的语法的必要组成部分。前者也可被typename代替。delete单独使用,表示释放具有期对象,默认版本调用全局的去配器(deallocator)::operator delete和析构函数。new单独使用,表示请求分配动态存储期对象,默认版本调用全局的分配器(allocator)::operator new和指定的析构函数。和operator连用表示分别表示去配器(operator delete)和分配器(operator new),用于释放分配器(allocator)的内存和分配内存。operator delete也在分配内存被异常中断时被调用。的组成部分。C++支持do-while循环、for循环和while循环。C++11新增了ranged-based for循环,用:分隔声明的对象和指定循环的范围。即double、float、long、int、short、signed、unsigned。
signed和unsigned作为前缀修饰整数类型,分别表示有符号和无符号。signed和unsigned修饰char类型,构成unsigned char和signed char,和char都不是相同的类型;不可修饰wchar_t、char16_t和char32_t。其它整数类型的signed省略或不省略,含义不变。signed或unsigned可单独作为类型,相当于signed int和unsigned int。
double和float专用于浮点数,double表示双精度,精度不小于float表示的浮点数。long double则是C++11指定的精度不小于double的浮点数。
其它关键字表示整数类型。从占用空间大小(sizeof)来看,保证char&=short&=int&=long&=long long。注意这些都不是相同的类型,即便大小和范围都一致;各自具有unsigned版本。其中long long是C++11指定的不小于long的整数。条件语句的组成部分。if表示条件,之后else表示否定分支。构成枚举类型名的关键字。C++11新增带作用域的枚举,用enum class或enum struct(两者等价)声明。这个关键字修饰声明,表示显式构造函数(模版),显式构造函数不参与特定的。
C++11从两个角度扩展了用法。其一是适用于(模版),类似构造函数,避免不需要的重载。其二是列表初始化,除非直接使用std::initializer_list,显式构造函数被列表初始化忽略(在C++98/03中,explicit仅对单一参数调用构造函数有意义,这里打破了这个限制)。导出模版,用于分离编译。当初标准委员会未经充分实践支持匆忙通过了这一决定,被EDG证明具备不现实的可用性(即便EDG唯一地实现了这一个特性,他们也表示反对)[7]。MSVC、GCC、Clang等其它主流编译器前端都没有实现这一特性,甚至这是唯一明显约定不符合C++98/03的特性。C++11废除了这个export关键字的含义,但保留这个关键字,供以后使用[3]。意为“外来的”,是存储类声明修饰符。这个关键字在C语言中即很不明确,容易被混淆(尤其是extern inline——好在C++没有这种用法)。extern表示被修饰的声明中,名称的链接保持和之前的一致(若已有相同声明存在),或保持默认值(若之前没有相同名称的声明存在)——取决于声明的位置。在命名空间作用域(注意包括全局命名空间),extern表示外部链接;若这里省略extern,则对于const对象,默认具有内部链接;否则表示具有和命名空间一致的链接(若顶层没有嵌套未命名的命名空间,就是外部链接,否则是内部链接)。
C++11新增extern用于模版显式实例化声明,表示不在当前翻译单元实例化模版,而在别处有定义。这可以提升编译效率。声明,使其不受访问权限控制的限制。声明定义(模版),提示编译时内联——将所调用的代码嵌入到主调函数中。注意是否内联取决于实现——编译器有权不实际内联,如果它认为这是必要的或更符合预期的目标代码质量。但inline还改变了ODR(One Definition Rule)的适用性。类似函数模版,在头文件直接定义inline函数不会视为重复定义违反ODR而编译出错。C++中,一个函数若声明inline,则每处声明都必须保证是inline,和C语言允许extern inline或static inline不同——尽管C++实现可以提供类似非标准的扩展。注意类成员函数若在类定义内给出定义则隐含inline。
C++11中,新增inline namespace,指示命名空间中的名称同时是外层命名空间直接包含的名称。这便于命名空间的版本管理,减少冲突。用于类的非静态非const数据成员,表示不受到成员函数的const的限制,可以在const成员函数中使用。表示命名空间——其中可以声明若干标识符,组成的名称与其它命名空间不冲突。
可以声明一个命名空间或命名空间别名。和操作符连用,指定一个重载了的操作符函数,也包括operator new和operator delete。指定类成员或基类中的名称的访问权限控制,分别表示仅供本类使用、供本类和派生类使用、不设限制。提示声明的对象被放入寄存器中以便得到更好的性能。同inline类似,并非强制;不同的是这个提示经常被现代的编译器无视,因此C++11中被标记为过时的。子程序返回语句,终止当前函数执行,使返回到主调函数的调用后。若返回类型不是void可以同时带返回值。和C语言类似,声明静态存储期对象,或指定一个函数的名称具有内部链接。在C++还有另一个用途——用于类作用域声明,表示声明的成员是类共有的,不需要通过类的对象访问。类的静态数据成员也具有静态存储期,除非被thread_local修饰。返回类型名或表达式具有的类型对应的大小。不能对函数使用(虽然可能有非标准扩展)。C++11新增支持直接对类的数据成员作为操作数(之前无法使用)。sizeof的操作数是不被求值的,利用这一点可以配合模版元编程测试类型正确性。声明一个模板、模版的特化或显式实例化(另见extern)。模版用于打破类型系统的某些限制,推迟类型检查到实例化得到具体的模版实例进行以复用代码,实现泛型和参数化编程。this是一种实体,仅在类的非静态成员中使用,是指向类的对象的指针右值。用以给数据类型取别名。字面名义上是定义,实际只是声明——这点和C语言的说法不同。
C++11中可被using新增的用法代替。声明或。具有虚基类或虚函数的类是多态类(polymorphic class),需要运行时提供支持来判断成员函数调用分派到的具体类型。获取表达式的类型,以std::type_info表示结果,可能抛出std::bad_typeid。当操作数非多态类(引用)类型在编译时即可确定结果,否则需要在运行时取得结果,即。告诉编译器一个嵌套的限定名(包含::)中的未知的标识符是一个类型。这只在模板中需要区分依赖名称时使用。
另一种用法是在模版声明参数列表中表示模版类型参数,可被class代替。有两种基本用法:using声明和using指示(using namespace ...)。
前者是声明,引入命名空间或基类作用域内已经被声明的名称。后者引入命名空间内所有的名称。
C++11新增了一类用法,可以代替typename,同时可以配合template使用(typedef基于语法考虑未被允许加入这种用法)。特殊的“空”类型,指定函数无返回值或无参数(在参数列表中只能够唯一地使用),用于表达式转换为void类型以丢弃计算值的必要(C++11加入了discarded-value-expression显式地指出了这一点),或用于void*类型。
新手上路我有疑问投诉建议参考资料 查看Managed Extension for C++_百度百科
关闭特色百科用户权威合作手机百科 收藏 查看&Managed Extension for C++本词条缺少信息栏、名片图,补充相关内容使词条更完整,还能快速升级,赶紧来吧!
是微软为了让Visual C++可以支持托管的引用程序的开发而对传统C++语言进行的扩展,是新一代Visual C++开发工具的语言核心。 C++ 托管扩展 (Managed Extensions for C++)
对Microsoft Visual C++语言进行扩展可以生成.NET代码,这些扩展称为C++.NET托管扩展。C++是惟一一种可以在同一个源文件中混合.NET代码和的语言,是真正的.NET系统语言。
C++引入托管扩展的原因是既可以保持与原有C++特性的充分兼容;又可以提供足够的对.NET应用开发的支持
托管C++应用程序开发之概述
1、什么是托管C++
托管是.NET的一个专门概念,它倡导一种新的编程理念,因此我们完全可以把“托管”视为“.NET”。由托管概念所引发的C++应用程序包括、和托管类三个组成部分。
.Net环境提供了许多核心的运行(RUNTIME)服务,比如和安全策略。为了能使用这些服务,必须要给运行环境提供一些信息代码(元数据),这种代码就是。所有的C#、VB.NET、JScript.NET默认时都是托管的,但Visual C++默认时不是托管的,必须在中使用命令行选项(/CLR)才能产生。
与密切相关的是。是由公共语言运行的器进行分配和释放的数据。默认情况下,C#、Visual Basic 和 JScript.NET 数据是。不过,通过使用特殊的关键字,C# 数据可以被标记为非。Visual C++数据在默认情况下是非,即使在使用 /CLR 开关时也不是托管的。
尽管Visual C++数据在默认情况下是非,但是在使用C++的托管扩展时,可以使用“__gc”关键字将类标记为托管类。就像该名称所显示的那样,它表示类实例的内存由器管理。另外,一个托管类也完全可以成为 .NET 框架的成员,由此可以带来的好处是,它可以与其他语言编写的类正确地进行相互操作,如托管的C++类可以从Visual Basic类继承等。但同时也有一些限制,如托管类只能从一个继承等。
需要说明的是,在托管C++应用程序中既可使用托管类也可以使用类。
在托管C++中,托管类和类是可以相互使用各自的特征,但托管类能够封装.NET框架中的组件,且最大限度地使用.NET框架中的特性,而传统的C++类是使用MFC和ATL来设计的,用来编制基于Windows环境的应用程序。
2、为什么使用托管C++
除了可以充分发挥.NET框架新特性外,使用托管C++还有下列好处:
(1) 由于在同一个应用程序中,甚至是同一个文件中,我们可以同时使用托管C++和传统的C++来编写,因而我们可以充分利用两种C++所带来的好处,并且可将代码和组件快速移植到.NET框架中。
(2) 使用托管可以从任何一个.NET框架兼容语言中调用一个C++组件,也可调用DLL、其它库以及类等。
(3) 可以直接从中访问.NET框架。
总而言之,使用托管C++是C++程序员编写.NET框架应用程序最好的一种选择,在充分理解.NET框架基础上,避免了使用其他语言如C#、VB.NET所带来的额外开销。
为什么使用
既要考虑Visual C++的兼容性,又要让传统C++语言具备足够的能力开发.NET应用程序,于是在新版本的Visual C++中,引入了。
在整个Visual Studio开发套件中,为了迎合.NET应用程序开发模式的要求,几乎对每个工具都作了或大或小的改进。其中,VB的变革力度应用各种软件产品之最。但是太大的变革往往会带来兼容性问题,特别是新版本的VB宣称其只能开发托管的应用程序(也就是.NET应用程序),所以对开发人员来讲,这肯定意味着过去使用VB编写的代码在新版本VB上进行重新构造的难度会很大。VB以前就在版本兼容性方面有着不如人意的历史—— 在VB4、VB5、VB6之间进行升级,会让开发人员付出很多辛苦。现在,由于VB的体系进行了很大的改动,所以版本兼容性问题会更严重一些—— 笔者已经在几个官方讨论组中看到了一些开发人员和相关人士对此表示出来的担忧,并看到不止一个开发人员对新版本VB在兼容性方面存在问题提出质疑甚至是批评。
作为开发套件中的另一位“元老”—— Visual C++,我们对其提供完整的.NET开发支持感到高兴的同时也同样担心它的版本兼容性问题—— Visual C++该不会也和VB一样,彻底与MFC和ATL分裂吧?答案是:不可能!
这是一个令人振奋的回答,下面就让我们花一点时间来了解新版本Visual C++是怎样处理变革和向下兼容之间的关系的。
另外,之所以对VB进行那样大的改革,是因为微软认为VB通常适用于快速应用程序领域,这些领域一般包含对效率要求不是很高的数据库前端应用程序或后端。当更为优秀的.NET框架发布之后,微软就为VB换了换“心脏”,以期大幅度增强VB的功能,使之成为快速开发.NET应用程序的主力军。而对于Visual C++这样一个在许多传统领域依然宝刀不老的工具,当然不能急躁冒进,将已有的功能丢弃。所以,在新版本的Visual C++中,采用了一种更为折衷的方法—— 扩展现有C++语言,让Visual C++在编写纯粹的.NET应用程序的同时,依然可以利用其成熟的技术进行未托管的应用程序的开发。
是一个对现行C++语言进行扩展的集合,这个集合可以帮助Visual C++的开发人员编写.NET Framework应用程序。由于是对语言做了扩展,而不是彻底去掉原先C++语言的功能,所以在托管扩展中,开发人员可以在同一个应用程序中混合使用传统未托管的代码和新型的托管的代码。这样做得到的一个直接好处是,应用程序既可以享受未托管的代码特性也可以享受托管的代码特性。对组件开发也是一样,传统组件可以很容易被包装(wrapper)成.NET 框架组件,充分保障已有工作的投资。
在实际工作中,如果开发人员遇到下列开发需求,使用托管扩展将是最佳选择:
● 需要快速地将未托管的C++应用程序合并到.NET框架中
对于以前开发的传统未托管的C++应用程序,因为开发人员可以在同一个应用程序中(甚至是在同一个文件中)混合使用两种类型的代码,所以托管扩展为实现两种代码的无缝转化提供了一种平滑的转化方式。
开发人员可以继续使用未托管的C++来编写组件,以利用语言本身强大的功能和灵活性。然后,为了让.NET 框架应用程序顺利访问这个传统组件,开发人员可以使用托管扩展编写一个很小的、转换效率很高的包装(wrapper)程序。
● 需要让任何一种与.NET框架相容的语言可以访问C++组件
托管扩展支持从任何.NET 框架相容语言来调用C++类。调用之所以可以实现,是因为使用托管扩展可以编写简单的包装类来对访问方暴露对应的C++类和方法。这些包装类都是托管的,并可以从其他.NET框架相容程序中进行调用。在调用过程中,外包类在托管的类和未托管的类之间扮演了映射层的角色—— 它让方法调用直接传递到未托管的类中。另外,需要特别指出的是,托管扩展支持对任何未托管的DLL或库的调用。
● 需要从未托管的代码中访问.NET框架类
为了得到更多的功能,在未托管的代码中,可以访问.NET 框架中的类。使用托管扩展,可以从C++代码中直接创建、调用一个.NET 框架类。在实际编程中,可以像处理普通未托管的C++类一样对待对托管的类的处理。另外,在.NET中提供了对未托管的COM的调用支持,可以编写未托管的代码直接访问。
因为托管的代码和未托管的代码各有优点,在实际工作中,开发人员可以根据项目的实际情况,灵活选择两者的使用。在某些追求访问效率的情况下,通过.NET 提供的COM接口进行访问可以收到比较好的运行效果;而在某些需要快速完成任务的情况下,利用.NET 框架提供的简便性进行工作会让开发人员倍感轻松。
托管C++并非独立存在的,而仅仅是对C++的一个语法扩展,允许C++程序员在.NET框架和CLR的基础上进行托管编程。与C#和Visual Basic .NET相比,其主要优点是旧代码可以比较快地移植到新的平台上,而且即使不完全重写代码,也可以通过互操作在同一个模块中无缝整合托管和,从新的.Net框架中获益。.Net框架封装了大量的API,例如网络访问、字符串操作、数据访问、XML服务、图形界面控件库、邮件服务、加密服务、文件输入/输出,甚至是WMI管理,也使得应用可以编写更加简洁的代码。目前只有托管C++及其后继者C++/CLI可以做到无缝整合托管和,而在托管代码中调用COM的速度又相当慢,所以经常被用于其他语言和非托管代码之间的桥梁。
托管C++允许程序员编写,内存管理的工作现在可以让CLR去自动处理,访问时也增加了类型检查,减少了缓冲区溢出和内存泄漏的危险,增加了程序的稳定性,但是在性能敏感的应用中,庞大的.NET框架和缓慢的并不是必要的,传统仍然是一些人的首选。
新手上路我有疑问投诉建议参考资料 查看

我要回帖

更多关于 c是什么意思 的文章

 

随机推荐