c++关于类型强转后作为引用参数的一些问题

c++关于类型强转后作为引用参数的一些问题

复制代码
typedef unsigned char byte;
void fuckme(byte& byValue); // 其他人的接口
// 我现在来调用
const byte byValue = 11;
fuckme(byValue); // 编译错误
fuckme(const_cast<byte>(byValue)); // 编译错误
fuckme(reinterpret_cast<byte>(byValue)); // 编译错误
fuckme((byte)(byValue)); // vs2008下通过,gcc编译错误
复制代码

找到了两篇介绍的文章: 

强制转换和引用参数的问题

复制代码
C++函数,  对非const引用参数不允许做类型转换,例如:
void update(float& i);
void g(double d, float r)
{
    update(2.0f); //错误
    update(r);  //传递r的引用
    update(d);  //错误,要求类型转换
}

一个void函数可以将另一个void函数作为它的return语句中的表达式,例如:
void g(int* p);
void h(int* p)
{
    return g(p); //可以,返回无值
}


函数重载只重载参数类型和参数个数,不重载返回类型

在不同的非名字空间作用域里声明的函数不算是重载,例如:
void f(int);
void g()
{
    void f(double);
    f(1); //调用f(double)
}

在同一个作用域中随后的声明里,默认参数都不能重复或者改变,例如:
void f(int x = 7);
void f(int = 7); //错误,默认参数不能重复
void f(int = 8); //错误,默认参数不能改变
void f(int);  //可以,函数可以重复声明
void g()
{
    void f(int x = 9); //可以,这个声明将遮蔽外层的声明
}

void error(string s);
void(*f1)(string) = &error; //可以
void(*f2)(string) = error; //也可以,与&error意思一样
void g()
{
    f1("vasa");  //可以
    (*f1)("mary rose"); //也可以
}

宏名字不能重载,而且宏预处理器不能处理递归调用

##宏运算符可以拼接两个串,构造出一个新串,例如:
#define NAME2(a,b) a##b
int NAME2(hack,cah)();将产生int hackcah();

#undef X保证不再用称为X的有定义的宏--无论在此指令之前有还是没有。
复制代码

 

对非const引用参数不允许做类型转换

标准规定了只有const &才可以引用临时对象。你的强制转换实际上是产生了临时对象的
如果是强转的话会产生临时变量,也就是右值,右值不能赋值给& ,只能赋值给CONST &

看来事这个原因了,我用的VS2005没产生错误,看来标准支持的并不好

看来是同类型转换,编译做了优化处理,并没有做转换过程




http://www.cnblogs.com/likebeta/archive/2013/01/16/2862510.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质?你是否想成为一名资深开发人员,想开发别人做不了的高性能程序?你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹? 那么C++就是你个人能力提升,职业之路进阶的不二之选。【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署;2.吊打一切关于C++的笔试面试题;3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块基础篇本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。进阶篇本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。提升篇:本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值