我知道这个交易.编译器尝试在转换运算符的帮助下将一个对象转换为其他对象的类型.有两种方法可以做到这一点.Constructor(将类转换为另一个)或转换运算符.所以,这个只是为了测试我是否彻底了解了这些概念.下面的代码给出了错误
using namespace std ;
class A
{
int i ;
public:
A(int a=0){this->i=a;}
A operator+(const A& b){
A c ;
return c(this->i+b.i);
}
void show()
{
cout<<i<<endl;
}
};
int main()
{
A a1(1),a2(2),a3;
a3=a2+a1;
a3.show();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我猜错误是在运算符+.当我尝试分配A(i).对于可以从int创建A的运算符没有匹配.
但后来我看到这个A的构造函数潜伏在后面.它可以将一个int转换为一个.Suppose,它确实将int转换为A.然后,调用变为A(B).这相当于复制构造函数.Hence,this电话应该工作.但它没有.总而言之,我很困惑.
请帮忙 .
我正在寻找匹配[ERROR]但不是匹配的正则表达式[ERROR].*Internal Error.我不是很擅长正则表达式.但我试过这个并没有用: -
\[ERROR\].*(?!.*[Ii]nternal [Ee]rror).
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我知道引用已注册变量的地址会导致编译错误.
int main()
{
register int i = 10;
int *a = &i;
printf("%d", *a);
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,gcc由于引用了已注册变量的地址,因此在使用时会出现编译错误i.
那么下面的代码,它做了类似的事情,怎么会导致没有错误呢?
#include<stdio.h>
int *NEXT(register int i)
{
int *ipt;
ipt = &i;
ipt++;
return ipt;
}
main ()
{
int j=2;
printf("%d",(NEXT(j)));
}
Run Code Online (Sandbox Code Playgroud)
编辑:我的gcc版本
i686-apple-darwin11-llvm-gcc-4.2(GCC)4.2.1(基于Apple Inc. build 5658)(LLVM build 2335.15.00)版权所有(C)2007 Free Software Foundation,Inc.这是免费软件; 查看复制条件的来源.没有保修; 甚至不适用于适销性或特定用途的适用性.