std::filesystem::path
各州的 cppreference 页面:
路径可以隐式转换为 和
std::basic_strings
,这使得可以将它们与文件 API 一起使用,例如作为std::ifstream::open
现在转换为 a很容易看出,因为它有一个接受类型std::filesystem::path
的非显式构造函数。std::string
但是,我似乎找不到的是一种std::string
隐含的方法。
有一个string
功能,但它是std::string string() const;
,不是operator std::string()
。使用
#include <filesystem>
void foo(std::string) {}
int main()
{
namespace fs = std::filesystem;
fs::path p1;
foo(p1);
}
这段代码可以用icc、gcc和clang编译,但不能用MSVS编译,它会给出错误:
example.cpp
<source>(10): error C2664: 'void foo(std::string)': cannot convert argument 1 from 'std::filesystem::path' to 'std::string'
<source>(10): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Compiler returned: 2
那么,哪个编译器是正确的?是否有隐式转换序列,或者编译器只是有帮助?