如何在没有任何警告或错误的情况下进行编译和运行?我不明白如何将x:Name
的取消引用值(它是一个整数)毫无问题地分配给字符串current
。
a
打印的字符串是
class Test {
public:
string a;
Test(initializer_list<int> t) {
auto current = t.begin();
// I am assigning an int to a string!
a = *current;
}
};
int main() {
Test test{65};
printf("%s\n", test.a.c_str());
}
相反,这段非常相似的代码会产生编译时错误:
A
错误是:
int main() {
initializer_list<int> test1{65};
auto current = test1.begin();
string b = *current;
return 0;
}
答案 0 :(得分:4)
请注意,a = *current;
和string b = *current;
执行不同的操作。
a = *current;
是一个赋值,它导致对operator=
的调用,而std::string::operator=
具有char
的重载,这使a = *current;
正常工作( implicit conversion从int
到char
)。
4)将字符ch替换为
assign(std::addressof(ch), 1)
string b = *current;
是一个初始化,它尝试调用constructor of std::string
来初始化b
。但是这些构造函数没有这样的重载,即int
(或char
)不起作用,那么string b = *current;
将不起作用。