显示下一条  |  关闭

相信自己

坚定自己人生的方向,走出自己炫彩的人生!

 
 
 
 
 
 

河北省 秦皇岛市 双子座

 发消息  写留言

 
喜欢就去奋斗。手拿金箍棒,脚踩筋斗云。冷对世界,笑看未来。
 
近期心愿我有我的爱好,并在为之努力。努力学习,专接本成功。加油,加油!
POPO  http://erbiao.lofter.com/
MSNbiao9988@hotmail.com
E-Mail erbiao526@gmail.com
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 
 
 
心情随笔列表加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 

日志分类

 
 
日志分类列表加载中...
 
 
 
 
 
 

自定义模块

 
 
模块内容加载中...
 
 
 
 
 
 
 

url文件制作

2012-4-30 22:45:42 阅读2 评论0 302012/04 Apr30

如何建立该文件呢。下面就教你新建url文件。

首先新建一个txt文档,你把其命名为你要跳转的网站或者网页的名称。

然后打开该txt文档,输入以下代码

[InternetShortcut]

URL= http://er.biao.blog.163.com/ 

然后保存,保存后更改该文件的文件后缀,为.url保存即可。

这样一个url文件建立成功。

双击该文档即打开本网站网页

作者  | 2012-4-30 22:45:42 | 阅读(2) |评论(0) | 阅读全文>>

Office中同音字修改

2012-4-11 22:02:02 阅读20 评论0 112012/04 Apr11

不知道大家时候遇到过在一篇文章中遇到过好多同一个词语中出现过多的同音字错误呢?在学校中有一位老师遇到了,当时自己也不会,在网上查了一下资料,总结如下:

拿以上词语举例,这里出现了四个词语,三个同音字错误,当然这里距离出现的少,可以手动更改,如果出现多了,我们首先会想到的事查找替换,同样我们可以在工具栏里调去查找替换或者Ctrl+F。如下图操作:

作者  | 2012-4-11 22:02:02 | 阅读(20) |评论(0) | 阅读全文>>

C/C++左值性精髓(三)左值转换----从函数到指针的转换

2012-4-10 8:05:56 阅读12 评论0 102012/04 Apr10

将函数转换为指针的目的,与数组到指针的转换一样,都是为了将符号数值化,以利于表达式计算。该条款规定:

A function designator is an expression that has function type. Except when it is the operand of thesizeofoperator or the unary&operator, a function designator with type ‘‘function returningtype’’ is converted to an expression that has type ‘‘pointer to function returningtype’’.

除了几种例外,一个具有函数类型的函数指示符被转换为指向该函数实体的指针。在C中,严格来讲,函数到指针的转换并不属于左值转换,因为C中的函数既不是左值,也不是右值,也正因为这个原因,C中的条款内容并没有指出转换的左值性。但对于C++,函数属于左值,因此该转换属于左值转换,结果是一个右值指针。

关于C++函数的左值性,有一个例外,就是非静态成员函数不是左值。笔者最初对此感到非常迷惑,因为从抽象本质上说,非静态成员函数并没有不符合C++左值涵义之处。笔者曾经向C++的创始人Bjarne Stroustrup博士发了一封email,向他请教这个问题,BS在回复中说,他认为这个规定是一种不太优雅的技术处理方式,以区别普通函数和非静态成员函数。就是说,这是一个人为规定。由于非静态成员函数被剔除

作者  | 2012-4-10 8:05:56 | 阅读(12) |评论(0) | 阅读全文>>

数组和指针这两种实体,是最令初学者感到痛苦和纠结的一对“冤家”。对两者内涵及联系的不断挖掘的过程,就相当于一次思维风暴。只有彻底理解对象、类型派生方式、左值性和常量等几种低层语言设施,才能获得对数组和指针的完整认识。那么,数组与指针之间千丝万缕的联系究竟是什么原因产生的呢?根本原因就在于下面要谈到的从数组到指针的转换条款。

        C和C++的数组到指针转换条款涵义大体相同,但C90和C99有些差别。C90规定:

Except when it is the operand of the sizeof operator or the unary & operator, or is a character string literal used to initialize an array of character type. or is a wide string literal used to initialize an array with element type compatible with wchar-t, an lvalue that has type “array of type” is converted to an expression that has type “pointer to type” that points to the initial element of the array object and is not an lvalue.

作者  | 2012-4-10 8:02:02 | 阅读(8) |评论(0) | 阅读全文>>

先看一个例子:

int i = 10;

编译器在内存中开辟一段具有sizeof( int )个字节的空间,用整数10初始化,并将该空间命名为i,i属于左值。当把i放在下面的表达式中时:

i + 1;

由于+双目运算符仅要求右值,i这个符号并不是它需要的,此时编译器就从i所代表的对象中取出整数10,交给+运算符进行运算。从i所代表的对象中取出整数10的过程就是一个从左值到右值的转换过程。在这一过程中,原本的左值i被右值10代替,但是,i本身的性质并无改变,i仍然是一个左值,有些人会误解为i已经成了一个右值,将转换的结果理解成了性质的改变,其实是犯了本末倒置的错误。

如果将i的定义改为cv受限形式,例如:

const int i = 10;

那么计算i + 1时,i转换的右值是否也带有const呢?所谓cv,指的是const和volatile两个修饰符。在C中,从左值到右值的转换结果不带有cv受限形式,即使左值是cv受限的,即C中不存在cv受限的右值;而C++稍有不同,允许存在cv受限的右值类对象,但右值内置类型与C一样。

由于函数非引用返回值属于右值,所以如果函数返回内置类型且带有cv修饰,该cv修饰将被忽略。请看如下代码:

const int foo( void );

int i = foo();

虽然foo返回的类型是const int,但它赋予i的数值是int类型的,而非const int。

正因为从左值到右值的这种转换结果的存在,我们可以用一个cv受限的左值赋予或初始化一个非cv受限的左值,例如:

作者  | 2012-4-10 8:00:20 | 阅读(9) |评论(0) | 阅读全文>>

C/C++左值性精髓(三)左值转换

2012-4-10 7:58:39 阅读7 评论0 102012/04 Apr10

左值转换又称为从左值到右值的转换。左值转换的发生一般基于两个原因:

第一:某些运算符仅要求右值操作数,例如+、-双目运算符,如果给予它们一个左值操作数,这时候就需要把左值转换为右值;

第二:某些指示符,例如数组和函数,由于不属于标量类型,即所代表的实体本身不能被视为数值,这些指示符欲参与表达式计算,就必须将其数值化,数值化的结果不同于一般对象的值,而是实体地址。

因此,基于上述原因,左值转换分为三类,分别是从左值到右值的转换、从数组到指针的转换和从函数到指针的转换。C++基于函数重载解析的需要,将上述三类左值转换概念化了,但C仅提出了条款,没有提出概念。

本文转自:http://blog.csdn.net/supermegaboy/article/details/7038341

作者  | 2012-4-10 7:58:39 | 阅读(7) |评论(0) | 阅读全文>>

在表达式的左值性中,后缀表达式是比较复杂的一种情况。后缀表达式有很多种,这里讨论的是E1.E2和E1->E2形式的后缀表达式。

4.1  E1.E2形式的后缀表达式

若E2为静态数据成员或引用数据成员,无论E1的左值性如何,E1.E2的结果都是左值;若E2为非静态非引用数据成员,C和C++标准都规定如果E1为左值,则E1.E2也是左值;当E1为右值时,从原理上说,右值对象的一部分也应该是一个右值,因此在C中,无论E2的左值性如何,E1.E2皆为右值;那么C++中的结果又如何呢?按道理应该顺理成章也为右值吧,但令人惊讶的是,C++98和C++2003都没有对此作出规定!因此在C++98和C++2003中,无论编译器将这种情况作为左值或右值都没有违反标准。这种情况显然是一个漏洞,在C++新标准C++11的制定过程中,WG21的专家在其Defect Reports中承认了这一点,并在C++11中将结果修正为一个prvalue(pure rvalue,纯右值)。

struct A

{

A( int& i ) : r( i ){}

static int k;

int &r;

int j;

};

int A::k = 10;

A foo( int& r ){ A a( r ); return A; }

......

int i = 20;

A a( i );

作者  | 2012-4-10 7:56:43 | 阅读(4) |评论(0) | 阅读全文>>

对于函数调用表达式和强制转换表达式的结果,在C中都属于右值;C++由于增加了引用类型,结果为引用的函数调用表达式和强制转换表达式都属于左值,示例如下:

int& fun1( int & r ){ return r; }

int fun2( void ){ return 10; }

int i = 20;

fun2( ) = 30;                               //A

cout << ( fun1( i ) = 30 );          //B

(  int & )10 = 20;                        //C

( const int & )10 = 20;              //D

( int & )i = 40;                             //E

( double & )i = 50;                     //F

cout << ( double & )i;               //G

作者  | 2012-4-8 21:28:50 | 阅读(6) |评论(0) | 阅读全文>>

C对于右值的定义是表达式的值,C中所有完整表达式的结果都是右值。所谓完整表达式(full expression),指的是这样的表达式,它不是其它表达式或声明符的一部分。包括条件表达式和逗号表达式等等都不产生左值,而子表达式计算产生的中间结果或临时对象,很多人以为都是右值,但实际上,它们不一定是右值。例如:

int a[ 5 ] = { 1, 2, 3, 4, 5 };

int *p = a;

*p = 2;                         /* A */

a[ 1 ] = 3;                     /* B */

*p;                             /* C */

a[ 1 ];                         /* D */

A和B中的*p和a[ 1 ]都是内置赋值运算符的子表达式,虽然都是中间结果,但显然都属于左值表达式;只有当它们作为完整表达式时,如C和D中的*p和a[ 1 ]所示,都会进行最后的左值转换,使得结果皆为右值。这个现象的本质,是由于C将所有完整表达式的结果一律进行最后的从左值到右值的转换,这个行为可以理解为一个完全求值的过程(完全求值不是标准术语)。

作者  | 2012-4-8 21:22:21 | 阅读(7) |评论(0) | 阅读全文>>

左值具有对象或不完整类型,在C++中还具有函数或引用类型,但是,并非具有上述类型的表达式就是左值,关键是左值必须指示一个对象,无论该对象有效或无效、完整或不完整,在C++中则包含非静态成员函数之外的函数。例如:

int i;

int *p = &i;

i和p都指示一个对象,且具有对象类型,因而都是左值,而&i虽然具有对象类型,但由于没有指示一个对象,因此不是左值。

不完整类型也可以成为左值,因为不完整类型本质其实与对象类型一样,只不过尚未有完整的对象信息。前向声明是我们最常用的不完整类型,对前向声明的引用是允许的,例如:

extern struct S s;

S & r = s;

虽然s的完整定义尚未可见,但仍可以作为左值初始化左值引用。

本文转自:http://blog.csdn.net/supermegaboy/article/details/7038305

作者  | 2012-4-8 21:10:22 | 阅读(10) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2012

   
创建博客 登录  
 关注