あなたのコードは、配列がゼロで終了していることを期待しているようです。そのようなことは保証されません。これは、文字列リテラルでのみ発生します。あなたの関数は実際には配列を取らず、ポインタを取ります。配列を値で取得することはできませんが、参照で取得する場合は、次のようにすることができます。
template <class var, size_t N>
var sum_numbers(var (&array)[N]) {
var sum = 0;
for (size_t f1=0; f1<N; f1++) {
sum = sum + array[f1];
}
return sum;
}
または、より簡潔に:
template<typename T, size_t N>
T sum_numbers(T (&arr)[N]) {
return std::accumulate(arr, arr + N, T());
}
または、完全に一般化して、C++11 を適切にサポートしたい場合は、次のようにします。
template<typename C>
auto sum_numbers(C const & c)
-> typename std::remove_reference<decltype(*std::begin(c))>::type
{
typedef typename std::remove_reference<decltype(*std::begin(c))>::type value_type;
return std::accumulate(std::begin(c), std::end(c), value_type());
}
テンプレートの詳細については、どこで参照できますか?
[このリスト]の中級および上級の書籍を参照してください。初心者向けの本でさえ、少なくともそれらの紹介を提供する必要があります.