Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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++;在'if()'语句中计算条件时,是否使用类的'int'运算符? 现代版本的C++在使用< >()( />代码>语句时,尝试使用类的 BoOL 运算符。当不存在bool运算符时,使用其他强制转换运算符,例如int。这一点如下所示 #include <iostream> using namespace std; class TwoInts { public: int a,b; operator bool() { cout << "TwoInts to bool" << endl; return 0;} operator int() { cout << "TwoInts to int" << endl; return 0;} }; class SixInts { public: int a[6]; operator int() { cout << "SixInts to int" << endl; return 0;} }; int main(void) { TwoInts T; SixInts S; if (T) cout << "xxx" << endl; if (S) cout << "xxx" << endl; return 0; } 查看一些旧的C++代码,似乎有一个我想验证的变化。 C++的旧版本在评估< If()> < /C> >语句> 时,使用类的 int < /Cux>运算符>如果有的话,版本是什么?p>_C++ - Fatal编程技术网 < /C> >语句> 时,使用类的 int < /Cux>运算符>如果有的话,版本是什么?p>,c++,C++" /> < /C> >语句> 时,使用类的 int < /Cux>运算符>如果有的话,版本是什么?p>,c++,C++" />

以前版本的C++;在'if()'语句中计算条件时,是否使用类的'int'运算符? 现代版本的C++在使用< >()( />代码>语句时,尝试使用类的 BoOL 运算符。当不存在bool运算符时,使用其他强制转换运算符,例如int。这一点如下所示 #include <iostream> using namespace std; class TwoInts { public: int a,b; operator bool() { cout << "TwoInts to bool" << endl; return 0;} operator int() { cout << "TwoInts to int" << endl; return 0;} }; class SixInts { public: int a[6]; operator int() { cout << "SixInts to int" << endl; return 0;} }; int main(void) { TwoInts T; SixInts S; if (T) cout << "xxx" << endl; if (S) cout << "xxx" << endl; return 0; } 查看一些旧的C++代码,似乎有一个我想验证的变化。 C++的旧版本在评估< If()> < /C> >语句> 时,使用类的 int < /Cux>运算符>如果有的话,版本是什么?p>

以前版本的C++;在'if()'语句中计算条件时,是否使用类的'int'运算符? 现代版本的C++在使用< >()( />代码>语句时,尝试使用类的 BoOL 运算符。当不存在bool运算符时,使用其他强制转换运算符,例如int。这一点如下所示 #include <iostream> using namespace std; class TwoInts { public: int a,b; operator bool() { cout << "TwoInts to bool" << endl; return 0;} operator int() { cout << "TwoInts to int" << endl; return 0;} }; class SixInts { public: int a[6]; operator int() { cout << "SixInts to int" << endl; return 0;} }; int main(void) { TwoInts T; SixInts S; if (T) cout << "xxx" << endl; if (S) cout << "xxx" << endl; return 0; } 查看一些旧的C++代码,似乎有一个我想验证的变化。 C++的旧版本在评估< If()> < /C> >语句> 时,使用类的 int < /Cux>运算符>如果有的话,版本是什么?p>,c++,C++,因此,建议的产出应该是 TwoInts to int SixInts to int 有关问题原因的一些详细信息:转换旧的大整数类的问题可能是由于int与bool在if()中引起的。不再有访问旧编译器的权限,因此无法测试旧行为 [编辑] 使用以下答案和更多研究: 答: >是/强>,许多预ISO标准C++版本(1980年代中期-1998),缺少一个 Boo.,使用了Casto int (或其他数值类型)。存在显著的编译器差异-这是预标准 第一个C++ ISO标准1998(ISO/IEC 1488

因此,建议的产出应该是

TwoInts to int
SixInts to int
有关问题原因的一些详细信息:转换旧的大整数类的问题可能是由于
int
bool
if()
中引起的。不再有访问旧编译器的权限,因此无法测试旧行为


[编辑]
使用以下答案和更多研究:
答:<强> >是/强>,许多预ISO标准C++版本(1980年代中期-1998),缺少一个<代码> Boo.<代码>,使用了Casto<代码> int <代码>(或其他数值类型)。存在显著的编译器差异-这是预标准


<>第一个C++ ISO标准1998(ISO/IEC 1488~1998年,AKA C++ 98)。它定义了
bool
类型。因此ISO标准C++一直使用<代码>布尔O/C++ > CAST <代码> IF-(<)/代码> .< /P> < P>不在标准C++中。严格来说,在标准C++中,if语句试图将其中包含的表达式转换为<代码>布尔O/COD>,然后基于此改变行为。 ISO/IEC 14882:2003 4.12[conv.bool]/1:

算术、枚举、指针或指向成员类型的指针的右值可以转换为bool类型的右值。零值、空指针值或空成员指针值转换为false;任何其他值都将转换为true

6.4.1[stmt.if]/1:

如果条件(6.4)为真,则执行第一个子语句。如果selection语句的else部分存在并且条件产生false,则执行第二个子语句。在if语句的第二种形式(包括else)中,如果第一个子语句也是if语句,则内部if语句应包含else部分。76)


注意“true”和“false”的明确引用,这是布尔概念。

< P>我不能直接回答这个问题,但是在1990版的C++标准版中没有<代码>布尔O/COD>类型。
同样地,
if
不可能使用
操作符bool()
,而且在我看来,如果它工作的话,它可能会使用
操作符int()
。我没有一份1990 C++参考手册来确认。

我们多大年纪了?像C一样,我想C++98之前的一些实现可能完全缺少了
bool
类型。有趣的是,知道一些旧代码仍然编译,尽管有一些修改。你引用了什么老C++编译器?代码有多个目标:UNIX/UNIX(AGIS/阿波罗,系统V,HPUX),Windows /DOS和OS9DOS?所以Turbo C++是在编译器列表中的吗?是的,没有<代码>布尔O/COD>。这就解释了为什么代码有
if(!!x)
。A
操作符的code>@chux:不,这很可能是“安全布尔”习语的结果。@Billy ONeal感谢您的反馈,并对今年的事情表示抱歉。我说“老C++代码”和 C++ >代码>自20世纪80年代以来一直流传,所以“旧”听起来很好,但没有学究式。最初应该建议使用大约一年。对
if()
用法的现代规范进行了很好的解释。最相关的部分是6.4/4:作为表达式的条件的值是表达式的值,对于
switch
以外的语句,隐式转换为
bool
TwoInts to int
SixInts to int