つまり>>749の文脈では struct unko { unko()=delete; }; int main() { unko u{}; } は struct unko {}; int main() { unko u{}; } と等価でありuはaggregate初期化されコンストラクタは呼ばれないからエラーにならない (unko();みたいにはっきりとデフォルトコンストラクタが呼ばれる状況ならエラーになる) 0755◆QZaw55cn4c (ワッチョイ aaef-hoCt)2017/09/21(木) 16:15:38.61ID:na02B6ss0>>750 お、おう! 0756デフォルトの名無しさん (オッペケ Sra3-u5jE)2017/09/21(木) 17:36:23.55ID:E1HbcZFyr>>752 規格によると unko u{}; は 8.5/p17『If the initializer is a (non-parenthesized) braced-init-list, the object or reference is list-initialized』によりリスト初期化される リスト初期化は8.5.4/p3『If T is an aggregate, aggregate initialization is performed』 に該当するのでコンストラクターが呼ばれずにaggregate初期化される。
なおaggregateの定義は8.5.1/p1により『array or a class (Clause 9) with no user-provided constructors (12.1), no (略)』 ここで8.4.1/p1により「=delete」は関数本体だが、 8.4.2/p5によりuser providedではないと見なされている(たぶん) 0757デフォルトの名無しさん (ドコグロ MMc2-gXon)2017/09/21(木) 22:11:37.04ID:VzX3yrPwM>>748 パケットレベルで振り分けたり、プロキシとして動作したり色々 ロードバランサ 仕組み とかでググるがよろし あとそこまで行くと完全にスレチなので
template <typename T, std::size_t X> void fillA2B(T (&A)[X*X*X], T (&B)[X*X*X], int ax1, int ax2, int ax3) { int i, j, k; int& ii = (ax1==1)? i: ( (ax1==2)? j: k ); int& jj = (ax2==1)? i: ( (ax2==2)? j: k ); int& kk = (ax3==1)? i: ( (ax3==2)? j: k ); for ( i = 0 ; i < X ; ++i ) for ( j = 0 ; j < X ; ++j ) for ( k = 0 ; k < X ; ++k ) B[ii + X * jj + X * X * kk] = A[i + X * j + X * X * k]; }
int main() { const int N = 2; int A[N*N*N], B[N*N*N]; int n{0}; for ( int a = 0 ; a < N*N*N; ++a ) A[a] = n++; fillA2B<int, N>(A, B, 1, 2, 3); fillA2B<int, N>(A, B, 2, 3, 1); fillA2B<int, N>(A, B, 3, 1, 2); return 0; } 0764デフォルトの名無しさん (ワッチョイ 8a9f-PvnN)2017/09/23(土) 22:38:24.75ID:cFmXNXGU0 左辺が j, k ,i 右辺が i, j, k のようだが 0765デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/23(土) 22:45:31.08ID:dWsmcDp10 あ、一気に全要素にFillしなくてもいいのかな? 0766デフォルトの名無しさん (ワッチョイ 0af0-PvnN)2017/09/24(日) 00:03:03.61ID:7FyCscw80 ……素直に3次元の配列にすりゃあいいんじゃねえのかなコレ どーーーしても1次元にしなきゃいけない重大な理由が背後に控えてんのかな? 0767デフォルトの名無しさん (スッップ Sdaa-pgy8)2017/09/24(日) 00:08:42.25ID:xnpjieyid 普通にメモリ確保したら1次元だからな 0768デフォルトの名無しさん (ワッチョイ 8aaa-Dc1X)2017/09/24(日) 00:21:25.13ID:J5lzydll0 B[ii][jj][kk] = A[i][j][k]; でも通るな 0769デフォルトの名無しさん (KR 0Hc2-GWmJ)2017/09/24(日) 00:25:12.68ID:QX+6yKIgH>>761 もちろん任意の次元を一度に扱えたら最高です。 ゆくゆくは各添字の次元を変えることも考えています。