#include <iostream>
#include <string>
using namespace std;
struct A {
A(const char *cp) { cout<<"字符串数组"<<endl; }
A(const string &str) { cout<<"stirng"<<endl; }
};
int main()
{
string str("sdfsd");
A("sdfsd");
// A(str);
return 0;
}
这是一个创建临时对象的问题:
问下,为什么 A("sdfsd");
能正确创建对象,
而 A(str);
就会编译出错呢?
通常,声明变量会使用
int a;
。但是,使用int (a);
同样是合法的。于是,
A(str);
就有了两种可能的解释,声明一个变量str
,类型为A
;或者构造一个类型为A
的临时变量,并将str
作为构造函数的参数。在有这种歧义的时候,C++ 总是认为这是一个变量声明。A("absf")
并没有这种歧义,它不能被解释为变量声明。