Аргумент шаблона не-типа: неявное приведение от bool к int работает, но от double к int - нет.Это почему? - PullRequest
0 голосов
/ 03 февраля 2019

Читая об аргументах шаблона не-типа, я наткнулся на эту статью.В своем примере они определяют шаблон класса Myfilebuf следующим образом:

template<class T, int size> class Myfilebuf
{
      T* filepos;
      static int array[size];
public:
      Myfilebuf() { /* ... */ }
      ~Myfilebuf()=default; // I made little changes here, to make the code compilable.
};

В следующем примере они используют этот шаблон класса, чтобы объяснить, какие вызовы этого класса шаблона возможны, а какие нет.т.Примеры, которые они приводят, следующие:

Myfilebuf<double, (75>25)> x;       // valid
Myfilebuf<double,200.0> y;          // error, 200.0 is a double, not an int

Так что теперь мне было интересно, поскольку (75> 25) равно bool, а не int.Я попробовал код, и он работает (см. здесь ), поэтому здесь возможна неявная приведение от bool до int, но не от double до int.
После просмотраВ этом поведении я попробовал эти кастинги без шаблонов, и они оба работают нормально:

#include <iostream>

int main() {
    int anInt;
    bool aBool=true;
    double aDouble=0.;
    anInt=aBool;
    std::cout<<anInt<<"\n";
    anInt=aDouble;
    std::cout<<anInt<<"\n";
    return 0;
}

Я изо всех сил пытаюсь понять это поведение.Может ли кто-нибудь помочь мне здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...