隐式类型转化与转化操作符operator TITeye - 亚美娱乐

隐式类型转化与转化操作符operator TITeye

2019年02月24日12时20分33秒 | 作者: 鸿禧 | 标签: 类型,操作符,参数 | 浏览: 2317

隐式类型转化与转化操作符 operator T
C++ 规范答应隐式类型转化,即对特定的类,在特定条件下,某些参数或变量将隐形转化成类目标 ( 创立暂时目标 ) 。假如这种转化价值很大 ( 调用类的结构函数 ) ,隐式转化将影响功能。

隐式转化的发作条件:函数调用中,当参数类型不匹配,假如隐式转化后能满意类型匹配条件,编译器将启用类型转化。

操控隐式类型转化的两种途径:

1) 削减函数调用的参数不匹配状况:供给签名 ( 函数参数类型 ) 与常见参数类型的准确匹配的重载函数。

2) 约束编译器的启用隐式转化:运用 explicit 约束的结构函数和签字转化函数。



下面的比如将导致隐式类型转化:

1) 未约束的结构函数:

class Widget { // …

  Widget( unsigned int widgetizationFactor );

  Widget( const char* name, const Widget* other = 0 );

};

2) 转化操作符 ( 界说成 operator T() ,其间 T 为 C++ 类型 )

class String {

public:

  operator const char*();  // 在需求状况下, String 目标能够转成 const char* 指针。

};



上面的界说将使许多愚笨的表达式经过编译 ( 编译器启用了隐式转化 ) 。

Assume s1, s2 are Strings:

int x = s1 - s2;  // compiles; undefined behavior

const char* p = s1 - 5;  // compiles; undefined behavior

p = s1 + 0;  // compiles; doesnt do what youd expect

if( s1 "0" ) { ...}  // compiles; doesnt do what youd expect



合理的解决方案:

By default, write explicit on single-argument constructors:

默许时,为单参数 的结构函数加上 explicit :

class Widget { // …

  explicit Widget( unsigned int widgetizationFactor );

  explicit Widget( const char* name, const Widget* other = 0 );

};



运用供给的转化签字函数替代转化操作符:

Use named functions that offer conversions instead of conversion operators:

class String { // …

  const char* as_char_pointer() const;  // in the grand c_str tradition

};
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表亚美娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章