符合类型(引用,指针)的两种不同形式的定义

1。符合类型(引用,指针)//数组是否属于
       的两种不同形式的定义:

       int a = 10;

定义一个指针:

       int *p = &a;
       int (*pp) = &a;
定义一个引用:
       int &ra = a;
       int (&rra) = a;

2。而且变量定义语句的识别优先于函数调用

class Test
{
public:
    Test(string* p){cout<<"ok"<<endl;}
    Test(int i){cout << "okokok" << endl;}
};

int main()
{
    string a;
    //Test(&a); // 想创建一个匿名对象,为什么编译不过?(vs2005)
    //Test(&b);
    Test(3);
    Test(&string()); // 显式ok
   
    int i = 10;
    int *p = &i;
    cout << *p << endl;
    int (*pp) = &i;
    cout << *pp << endl;
   
    return 0;
}

Test(&a)编译器优先认为它是一个引用变量的声明,等价于Test &a;
这明显错,因为引用必需初始化,而且这个引用变量与string对象a重名了

Test(&b)
这个则仅仅因为是认为是引用,定义需的初始化

Test(3)这个不存在和变量定义语句冲突的情形,所以创建了临时对象,可见,创建临时对象用这样的方式是正确的,错的只是那个构造函数的使用形式与变量定义语句相冲突了

据说vs2005 Test(&string())不能显式“ok”,个人认为编译器的优化行为,这个临时对象未被使用,所以编译器未构造它
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值