据我所读的static_cast,以下代码应该能够工作:
#include <iostream>
#include <string>
class ConvSample
{
public:
template<typename T>
constexpr operator T(){
return {};
}
};
int main()
{
ConvSample aInst;
int i = aInst;
std::cout << i << "\n";
std::string str = static_cast<std::string>(aInst);
std::cout << str << "\n";
return 0;
}
它在一些编译器如Clang中完美运行。但是例如在MSVC或ICC中不完美运行。
总的来说,它们抱怨由std :: string提供的不太有效的构造函数引起的一些歧义。
此外,如果我在gcc上打开Wconversion,则会导致分段错误?!
代码有问题吗?这些错误只是编译器的错误吗? 如果我更改代码以不使用模板,则它可以正常工作: Compiler Explorer
static_cast<const basic_string&>
,这是构造函数(7)的精确匹配:https://en.cppreference.com/w/cpp/string/basic_string/basic_string - Richard Critten