更多 C++ 惯用法/隐式转换
外观
当某个类型 T1 的表达式用在不接受该类型但接受其他类型 T2 的上下文中时,就会执行隐式转换。
在某些上下文中,可以使用与函数所需类型不完全相同的变量。特别是
- 当表达式用作调用以 T2 作为参数声明的函数时的参数时;
- 当表达式用作期望 T2 的运算符的操作数时;
- 当初始化类型为 T2 的新对象时,包括在返回 T2 的函数中的 return 语句;
- 当表达式用在 switch 语句中时(T2 为整型);
- 当表达式用在 if 语句或循环中时(T2 为 bool)。
只有当从 T1 到 T2 存在一个明确的隐式转换序列时,程序才是格式良好的(可以编译)。
更多信息:C++ 参考 en.cppreference.com implicit_conversion
指针到布尔的转换
int a = 42;
int* ptr = &a;
if (ptr) // checks if ptr is not null_ptr
...
std::string 到其他类型的转换
#include <string>
struct A {
A( const std::string & s ) {}
};
void func( const A & a ) {
}
int main() {
func( "one" ); // error - requires 2 steps to convert: const char* -> std::string -> A
func( A("two") ); // ok - converting const char* -> std::string, which is used to create A
func( std::string("three") );// ok - implicit conversion std::string -> A
}
示例来自这个 Stack Overflow 问题,标题为:C++ 隐式转换。
到处都是,一直都是,...