関数に渡された文字列配列のサイズを見つける方法。サイズは関数内で計算する必要があります。
#include<iostream>
using namespace std;
template <typename T,unsigned S>
unsigned arraysize(const T (&v)[S]) { return S; }
void func(string args[])
{
unsigned m=arraysize(args);
cout<<m;
}
int main()
{
string str_arr[]={"hello","foo","bar"};
func(str_arr);
}
私が理解していないのは:
ステートメントarraysize(str_arr)
がメインで使用されている場合、問題は発生しません。str_arr は配列であるため、str_arr はポインターとして機能するため、arraysize(str_arr) を使用すると、アドレスを arraysize 関数に送信していることになります (間違っている場合は訂正してください)。
しかし、関数 func() では、問題がある理由がわかりません。つまり、ステートメントarraysize(args)
が文字列配列 args のアドレス (またはポインター args のアドレス) を送信します。説明?
また、上記のコードを修正してください..