C++ 为什么我可以通过“a”;“C字符串”;对于一个需要std::string的函数,它可以工作吗?
我有一个方法:C++ 为什么我可以通过“a”;“C字符串”;对于一个需要std::string的函数,它可以工作吗?,c++,type-conversion,C++,Type Conversion,我有一个方法: void Foo::Bar(const std::string &str) { printf("%d", str.length()); } 当我这样做的时候,它可以无缝地工作 foo.Bar("hello"); 我认为 > hello > >不是 STD::String < P>因为STD:String有一个构造函数,它使用了 const char */Cuff>,C++将自动为您构造一个临时字符串对象。 ,因为STD::String有一个构造函数,它使用
void Foo::Bar(const std::string &str)
{
printf("%d", str.length());
}
当我这样做的时候,它可以无缝地工作
foo.Bar("hello");
我认为
,因为STD::String有一个构造函数,它使用了<代码> const char */Cuth>C++将自动为您构造一个临时字符串对象。
> P>技术上,它是一个代码> char const(6)< /Cord>。但是,是的,您应该能够做到这一点,这是因为隐式转换和一个<代码> STD::String < /Calp>构造函数。
< P>技术上,它是<代码> char const(6)。但是,是的,由于隐式转换和一个std::string
构造函数,您应该能够做到这一点。因为有一个?隐式?使用std::string(char*)
构造函数从char*
转换为std::string
。因为有一个隐式?使用std::string(char*)
构造函数将char*
转换为std::string
。可以通过两种方式隐式转换用户定义的类型:
任何接受单个参数且不使用关键字“explicit”的构造函数都定义了隐式转换(从参数类型到正在构造的对象类型)。标准字符串类故意不使用“explicit”来提供这种转换的便利。有两种方法可以隐式转换用户定义的类型:
任何接受单个参数且不使用关键字“explicit”的构造函数都定义了隐式转换(从参数类型到正在构造的对象类型)。标准字符串类故意不使用“显式”来提供转换的便利性。
与您的问题有点关系:如果C++中有一段时间,您不明确地要求编译器为您更改类型,那么当兼容构造函数存在时,使用关键字“显式”。在构造函数之前。然后它会给你一个编译器错误。但是,您只能对创建的类型执行此操作。与String类型无关。
与您的问题有一定关系:如果C++中有一段时间,您不明确地希望编译器为您更改类型,那么当兼容构造函数存在时,在构造函数之前使用关键字“显式”。然后它会给你一个编译器错误。但是,您只能对创建的类型执行此操作。不适用于字符串等STL类型。您的字符串文本是一个字符常量[6]
它的名称衰减为const char*
,以传递给函数
然后执行隐式转换,因为:
- 该函数接受对常量的引用,这意味着可以将
绑定到它rvalue
可以隐式转换为const char*
std::string
rvalue
字符常量[6]
它的名称衰减为const char*
,以传递给函数
然后执行隐式转换,因为:
- 该函数接受对常量的引用,这意味着可以将
绑定到它rvalue
可以隐式转换为const char*
std::string
rvalue