C++配列の型に関するC++規格について教えていただきたいです。
C++配列の型に関するC++規格について教えていただきたいです。
以前にYahoo知恵袋でも質問しましたが、答えが得られませんでしたので、こちらでも質問させていただきたいと思います。
※以下、質問になります。(分かり難いかも知れませんが宜しくお願い致します。)
環境は、Visual Studio 2010 (C++) です。
std::fill_n() で次のような警告がでましたので、調べていましたところ、
...\xutility(2801): warning C4996: 'std::_Fill_n': Function call with parameters that may be unsafe - ...
次のような定義方法を見つけました、
typedef char (&std::tr1::_No)[1];
↑このような定義方法があることを初めて知りました。
ちなみに、std::fill_n() は次のようになりました。
long data[32];
std::fill_n(data, 32, 0); ←正常
long* p_data = data;
std::fill_n(p_data, 32, 0); ←warning
long (&a_data)[32] = data;
std::fill_n(a_data, 32, 0); ←正常
知りたいのは、配列を関数に渡すときに、
通常は、void func(long* pd); のようにポインタで渡すと思います。
また、void func(long pd[]); や void func(long pd[32]);
もポインタの場合と同じになりますが、型保証がありません。
これはC++規格で規定されていることだと思います。
次のようにすると、型保証がされますが、この記法がC++の規格として規定されているかを知りたいです。
1. void func(long (&ad)[32]); // 関数呼び出しは、func(data);
2. void func(long (*pd)[32]); // 関数呼び出しは、func(&data);
また、通常のポインタで配列を渡すことを、配列の参照渡し?と言うと思いますが、
この1,2,は何渡し?と言われるのでしょうか?
#長い文になって申し訳ありませんが、宜しくお願い致します。
お礼
回答ありがとうございます。 大変参考になりました。