C ++从bool到string的隐式转换

时间:2015-07-01 13:56:50

标签: c++

我有以下代码,它在Visual C ++ 2012中编译。

for (Bar b : l) {
    if (b instanceof Foo) {
        System.out.println(((Foo)b).count.toString()); // This always gives 1.
    } else {
        System.out.println(b.count.toString()); // This always gives 0.
    }
}

布尔'假'是否传递到字符串构造函数

instanceof

然后指针为空(因为false = 0)。为什么要编译,应该根据C ++ 11标准进行编译?

1 个答案:

答案 0 :(得分:5)

MSVC错误地将false视为空指针常量。但是,根据N4140,§4.10[conv.ptr] / 1(强调我的):

  

空指针常量是整数字面,其值为零   或者类型为std :: nullptr_t 的 prvalue。空指针常量可以是   转换为指针类型;结果是空指针值   该类型并且可以与对象的每个其他值区分开来   指针或函数指针类型。

措辞与C ++ 11略有不同,你可以find that discussion here。判决结果是在C ++ 11中也是一个错误。

根据[lex.icon] / 1的说法,对于可见性,TartanLlama在下面提供了“integer literal”的定义:

  

整数文字是一个没有句号或指数部分的数字序列,可选择分隔单引号,在确定其值时会被忽略。