[過去ログ] 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
13(2): デフォルトの名無しさん [sage] 2016/11/07(月) 18:18:06.75 ID:hOJqMng1(1/4) AAS
>>1212(2): デフォルトの名無しさん [] 2016/11/07(月) 15:00:49.14 ID:3Xim9e5h(1/2) AAS
>>4
C++11以降ならstd::initializer_listが使える
#include <iostream>
#include <initializer_list>
#include <algorithm>
class A {
int a[6];
public:
A(std::initializer_list<int> b) {
std::copy(std::begin(b), std::end(b), a);
}
void print() const {
for (int i : a)
std::cout << i << std::endl;
}
};
int main()
{
A a({10, 4, 2, 8, 5, 66});
a.print();
}
それinitializer_listに6っこ以上与えたら実行時のアクセス違反になる
>>44(3): デフォルトの名無しさん [sage] 2016/11/07(月) 09:27:53.95 ID:vooGYje+(1) AAS
前スレ>>999再掲
class A{
int a[2];
A(int b[])
:a(b) //error
{}
};
この:a(b)ってなにか書き方ありますか?
前スレ>>1000
無理でした・・・
C++11以降ならstd::array使うべき
そうすれば普通に書ける
class A{
std::array<int,2> a;
public:
A(const std::array<int,2> &b):a(b)
{
}
};
14: 13 [sage] 2016/11/07(月) 18:21:04.82 ID:hOJqMng1(2/4) AAS
2行目「6個より多く」だったね
16(3): デフォルトの名無しさん [sage] 2016/11/07(月) 19:07:23.45 ID:hOJqMng1(3/4) AAS
要求は固定長の配列であって、動的に増やせるようにしろとは言ってないので
それのコードは非効率にしかならないと思うよ
23: デフォルトの名無しさん [sage] 2016/11/07(月) 22:16:57.66 ID:hOJqMng1(4/4) AAS
>>1919(2): デフォルトの名無しさん [sage] 2016/11/07(月) 20:07:47.59 ID:Z2RT26Su(2/2) AAS
ID:hOJqMng1 の主張の変遷
1.わざと大きい初期化子を与えると実行時にアクセス違反になると主張
→だから動的に対応できるようにした
2.すると今度は非効率的だからarrayを使えという
→arrayが特に効率的なわけではないし、今度は「要求は固定長の配列だ」と言い出す
どう考えても言ってることがコロコロ変わってるんだが
まず効率は動的確保を行うnewとunique_ptrより確実にarrayのほうがいい
そして>>4の要求はコードから明らかに固定長でいいと言ってる
これは私の勝手な主張ではなく元の要求がそうなってる
目的を達成するために非効率な動的確保は必要ない
私はアクセス違反になるといったが動的確保にしろとは言っておらず、動的確保にしたのはそっちが勝手にやったこと
アクセス違反を回避するために動的確保にするのは全く割に合わない
だったら長さチェックすればいいだけ
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.037s