Нетипичные параметры шаблона ссылки - PullRequest
1 голос
/ 18 сентября 2010

Какая польза от параметров «не тип шаблона» типа «ссылка»?Почему такие параметры также рассматриваются как 'rvalues'?

template<int &n> void f(){
   &n;               // error
}

int main(){
   int x = 0;
   f<x>();
}

Ответы [ 2 ]

4 голосов
/ 18 сентября 2010

f<x> недействительно. Кстати, мой компилятор компилирует вашу шаблонную функцию без плохого вызова.

template<int &n> void f(){
   int* ptr = &n;
}

int something = 0;

int main() {
    f<something>(); // success
    int x;
    f<x>(); // C2971: Cannot pass local var to template function
}
0 голосов
/ 18 сентября 2010

Честно говоря, я не могу придумать много смысла для этого типа конструкции, хотя я уверен, что они, вероятно, существуют. Мне кажется, что вы ограничены, потому что n должно эффективно существовать в глобальной области видимости, чтобы f () была действительной. Вы можете сделать что-то вроде следующего:

#include <iostream>

using namespace std;

template<int &n> void sq(){
    n *= n;
}

int something = 10;

int main()
{
    cout << something << endl;
    sq<something>();
    cout << something << endl;

    return 0;
}

но я не вижу, что это действительно даст вам, чего нельзя достичь с помощью не шаблонных функций. Будет ли sq() эффективно рассчитываться во время компиляции?

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