我无意中发现以下代码是可以编译通过的:
#include <string>
#include <iostream>
class A{
int i{};
std::string s{};
public:
A(int _i, const std::string& _s) : i(_i), s(_s) {
puts("Called A(int, const std::string)");
}
};
A foo(int k, const char* cstr){
return {k, cstr}; // (*)
}
int main(){
auto a = foo(10, "Hi!");
return 0;
}
我感兴趣的是 (*)。我猜测函数 foo
等价于:
A foo(int k, const char* str){
return A(k, cstr);
}
然而,在 (*) 中,这种机制是否有特殊的名称?还是简单地由于返回类型,编译器知道要调用哪个构造函数?