LINUX.ORG.RU

И это мэйнстримный язык?

 , , ,


0

3

Имеем содержимое файла testbool.cpp

#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
    bool foo = 7 > 0;
    cout << foo << endl;
    bool bar = 7.5;
    cout << bar << endl;
    bool baz = "dont't foo";
    cout << baz << endl;
    return 0;
}
Компилируем:
den@haruhi:/tmp$ g++ -o testbool testbool.cpp
den@haruhi:/tmp$ ./testbool 
1
1

den@haruhi:/tmp$ g++ -Wall -o testbool testbool.cpp
den@haruhi:/tmp$ 

den@haruhi:/tmp$ g++ -std=c++0x -Wall -o testbool testbool.cpp
den@haruhi:/tmp$

Ничего, ни одного предупреждения несмотря на явное несоответствие типов.

Код на Java:

public class Main
{
    public static void main(String args[])
    {
        boolean foo = 7.5 < 0;
        System.out.println(foo);
        boolean baz = "Хурдыбурды";
        System.out.println(baz);
    }
}
Вывод компилятора:
den@haruhi:/tmp$ javac Main.java 
Main.java:7: incompatible types
found   : java.lang.String
required: boolean
		boolean baz = "Хурдыбурды";
		              ^
1 error

И как это понимать? Где «логический тип» в С++?

★★★★★

Последнее исправление: LongLiveUbuntu (всего исправлений: 1)
Ответ на: комментарий от www_linux_org_ru

Сейчас оно прыгает по размеру типа данных. Если вам надо что-то другое пишите свой класс.

grondek
()
Ответ на: комментарий от www_linux_org_ru

или вот — опять разумно здесь конвертацию в bool сделать ровно наоборот

Пиши на bash. Там именно так:

$ [ 3 > 2 ]
$ echo $?
0
$ if [ 3 > 2 ]; then echo ok; fi
ok

monk ★★★★★
()

А попробуй вот это скомпилировать:

#include <iostream>
#include <string>

std::string foo() { return false; }

int main() { std::cout << foo(); }

alexeiz
()
Последнее исправление: alexeiz (всего исправлений: 1)

bool и есть логический тип. Проблема в неявных преобразованиях для совместимости с си(где bool нет).

forCe
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.