Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;转换运算符_C++ - Fatal编程技术网

C++ C++;转换运算符

C++ C++;转换运算符,c++,C++,在以下代码中: if ( cin >> x ) { /* ... */ } 标准库定义了一个运算符转换运算符void*,它将类型istream转换为void*。但是,如果if测试一个条件,为什么标准库不定义从类型istream到类型bool的转换?或者在实施过程中是否有任何隐含的考虑 原因很简单,因为您不希望意外地以转换为int而告终。例如,假设存在到bool的隐式转换,您编写了 if (std::cin << x) { /* ... */ } >(STD:CIN

在以下代码中:

if ( cin >> x ) { /* ... */ }

标准库定义了一个运算符转换运算符void*,它将类型istream转换为void*。但是,如果if测试一个条件,为什么标准库不定义从类型istream到类型bool的转换?或者在实施过程中是否有任何隐含的考虑

原因很简单,因为您不希望意外地以转换为
int
而告终。例如,假设存在到
bool
的隐式转换,您编写了

if (std::cin << x) { /* ... */ }
<代码> >(STD:CIN < P> <代码>操作符BooR()/Cyto>总是有点问题。主要问题是C++中的代码> Boo.<代码>是算术运算符,因此任何实现<代码>运算符BooR()/Cype >的类将自动转换为<代码> int < /C> > < < 因此,以下准则是合法的,但毫无意义:

cout << (2 * cin);
也就是说,它们使用指向成员函数的指针,而不是
bool
void*
,这将是真正无用的,除了转换为
bool

也就是说,使用C++11时,该语言的设计者注意到了这个问题,并设计了以下解决方案:

explicit operator bool() const
{ return ...; }
现在,仅当对象处于真正的bool上下文(
if
while
…)中时,才会调用此运算符,而不是在任何随机整数运算中调用。

新库(C++11)会调用此运算符。在旧规范中,没有使用直接转换为
bool
,以避免意外隐式转换为整数类型(例如:int)“因为我们在C++标准中需要C”我猜(+ 1)更好的例子和更干净的解释,然后我写了一半的例子。
explicit operator bool() const
{ return ...; }