LINUX.ORG.RU

C++11 explicit conversion operator


0

2

Сие правильно или нет?

struct A
{
  	explicit operator bool() { return true; }
};


int main()
{
        A a;
	bool b { a };  // Почему эта строка некорректна??
}



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

Нет конечно! У тебя «a» нигде не определено =).

Deleted
()

Лучше спросите y компилятора

AIv ★★★★★
()

Не могу уловить вывод компилятора. Телепатируй сильнее, помех много. Особенно от соседей. Своим сексом весь эфир забили.

anonymous
()

У меня работает:

#include <iostream>

struct A {
    explicit operator bool() {
        return true;
    }
};


int main() {
    A a;
    bool b { a };  // Почему эта строка некорректна??
    std::cout << b << std::endl;
}
$ g++-4.7 -Wall -std=c++11 ./test.cpp -o test
$ ./test 
1

Если вместо true возвращать false, то выводит «0». Так что работает и даже без ворнингов.

DELIRIUM ☆☆☆☆☆
()

хм

не знал про эту (эксплицит оператор) фичу. ТС, спасибо :)

//неявное приведение не нужно, да

Stil ★★★★★
()
Ответ на: хм от Stil

Еще полезно объявлять конструкторы как explicit, через них тоже неявное приведение иногда идет.

AIv ★★★★★
()
Ответ на: комментарий от Stil

посмотри его вариант до исправления, не про explicit речь. хотя explicit operator bool() меня удивил, да.

x0r ★★★★★
()
Ответ на: комментарий от AIv

explicit-конструкторы были, а explicit-операторов не было.

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