Почему мы не можем использовать ключевое слово ? Я не могу придумать ни одной веской причины не допускать этого (и несколько наоборот).Почему мы не можем сделать функции явными?
Почему это?
Почему мы не можем использовать ключевое слово ? Я не могу придумать ни одной веской причины не допускать этого (и несколько наоборот).Почему мы не можем сделать функции явными?
Почему это?
То, что вы хотите достичь (запретить преобразование типа для ваших аргументов функции) может быть легко достигнуто путем объявления удаленной версии шаблона функции:
template <class T> void f(T) = delete;
void f(int){}
int main()
{
double k = 4;
f(k); //error: use of deleted function ‘void f(T) [with T = double]’
}
Без C++ 11 вы можете создать шаблон 'f' и только реализовать требуемую специализацию. –
@BenjaminBannier, который работает только для одного аргумента, потому что вы не можете частично специализировать функции до C++ 11;) – nijansen
@BenjaminBannier вы можете * перегружать * шаблон и просто не определять его вообще - однако вы получите ошибки компоновщика вместо более прямая ошибка «удаленной функции». –
explicit
используется для указания того, что функция не может используется для выполнения неявного преобразования типов. Поскольку преобразования типов могут выполняться только с использованием конструкторов и операторов преобразования (например, operator int()
), explicit
имеет смысл только при применении к ним.
Историческое примечание: до 2011 года оно не могло применяться к операторам преобразования; это широко расценивалось как недостаток, который был исправлен.
Потому что вы не можете вызвать функции неявно в любом случае? (Edit - ну, конечно, конструкторы с одним аргументом и операторы преобразования в любом случае являются функциями, но вы знаете, что я имею в виду. «Нормальные» функции) – BoBTFish
Можете ли вы объяснить, что вы ожидаете, если вы объявите произвольную функцию как «явную»? 'explicit 'предотвращает неявные преобразования, как это применимо здесь? – nijansen
@nijansen Я бы этого не ожидал (http://ideone.com/mtbfsE) – user1233963