我有一个带有隐式const char *构造函数的类。我的直觉告诉我,不管是隐式还是显式调用构造函数都没有关系,但显然在const char *的情况下它确实很重要,我不明白为什么。在VC++编译器匹配foo(常量字符串& t)为第一次调用下面的代码foo的:C++ 0x:Rvalue引用参数匹配隐式const char *构造函数的类
struct Str
{
Str(const char *c)
{
value = c[0];
}
Str(double c)
{
value = char(c);
}
char value;
};
void foo(const Str &t)
{
cout << "const Str &t matched\n";
}
void foo(const Str &&t)
{
cout << "const Str &&t matched\n";
}
void main()
{
foo("v");
foo(Str("v"));
foo(5.0);
foo(Str(5.0));
}
它的foo其他一切的海峡& & T版相匹配。为什么它在隐式“v”情况下表现不同?我应该改变以获得foo版本的匹配吗? (想象一下foo是例如向量::的push_back功能 - 我宁可不要明确地投我的所有字符串文字。)
我还没有在这种情况下检查STL的行为,因为我认为它可以正常工作与std :: string(看到字符串文字隐式转换为std :: string是非常普遍的。) – 2011-05-15 23:54:29
@Matt Fisher :这是标准本身的错误(因为它存在),而不是任何库或个人编译器,这是修复更严重错误的最后时刻。他们没有解决这个相对琐碎的细节并不是不合理的。 – Puppy 2011-05-16 00:02:39