[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 03/19 07:59 / Filesize : 267 KB / Number-of Response : 1031
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part131



1 名前:デフォルトの名無しさん(ワッチョイ 3b96-ov1m) mailto:sage [2017/07/29(土) 11:28:28.97 ID:o30VDF4g0.net]
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part130
mevius.2ch.net/test/read.cgi/tech/1490917669/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
echo.2ch.net/test/read.cgi/tech/1478440682/

■長いソースを貼るときはここへ。■
 codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

752 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 10:38:02.75 ID:S6233VLa0.net]
出来ます
サーバー側はリクエストに応じて複数のプロセスを起動し、
同じポート番号を使って複数のプロセスが受け答えします
各プロセスはそれぞれで生成したソケットを使ってクライアントとやり取りします

753 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 10:57:49.02 ID:mIuFgC1Fd.net]
>>730
それってプログラム内でforkして子プロセスを作る場合の話です?
サーバソフトAとサーバソフトBの両立ができたとすると
ポートXX使用します!ってのはどこでどちらを使うと判断するのでしょうか...

754 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 13:04:43.06 ID:TdcUa1CK0.net]
特定ポートでlistenするプロセスは一つだけです。
複数のプロセスで共用は出来ません。

755 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 17:39:27.17 ID:5tfXl8chM.net]
>>729
LANポートが複数あればできるし、LANポートがひとつしかなくてもIPアドレスを複数割り当てられるなら可能

756 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 18:44:47.92 ID:PcYxkZC90.net]
>>733
ああ言えばこういうの典型
どうでもいいけどC++と関係ないクソ話もうヤメロよカスども

757 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 18:49:41.83 ID:Poc3cQP+M.net]
しかも間違ってるという

758 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 18:57:54.46 ID:5tfXl8chM.net]
>>735
ん?
どこか違ってたっけ?

759 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 19:48:42.76 ID:SHe+skknr.net]
>>736
二つ前のレスくらい読んでほしいものだ

760 名前:デフォルトの名無しさん [2017/09/19(火) 20:12:29.29 ID:4ZFv917O0.net]
C++98ではできない
C++11以後できるようになった
だろ、通信は本質的にマルチタスクだ



761 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 00:14:27.26 ID:zNeStlMI0.net]
なにをいってるかよくわからんがすごい自信だ。

762 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 01:48:22.84 ID:E2xZjesx0.net]
規格外のライブラリならほぼ何でもありといえばありだけどさ。
ライブラリ自信はまだ策定中でしょ。

763 名前:デフォルトの名無しさん [2017/09/20(水) 03:12:29.17 ID:E3lPvo/Y0.net]
bind()する時のローカルのIPアドレスを別々にすれば同一ポートで別々のサーバプログラムって動かないの?

764 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 04:49:07.58 ID:uOAr6bd90.net]
>>741
だから動くってば
ユニークである必要があるのはIPアドレス:ポート番号の組み合わせだから

>>730
>各プロセスはそれぞれで生成したソケットを使って
まさかその生成されたソケットがサーバーと同じポート番号を持つとか思ってないよな?

いずれにせよこんなのはネットワーク初心者の話題であってC++とは何も関係ない

765 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 06:46:32.53 ID:k3KNfXHnM.net]
>>737
それが間違ってるって話
>>741が言うようにローカルアドレスを指定すれば同じPCで同じポートを使用するサーバーを複数立てられる

766 名前:742 mailto:sage [2017/09/20(水) 10:56:07.53 ID:uOAr6bd90.net]
自己訂正
>まさかその生成されたソケットがサーバーと同じポート番号を持つとか思ってないよな?
あはは、これは俺の勘違いだったわ
acceptで返されるソケットはlistenポートと同じポート番号を持っている

767 名前:デフォルトの名無しさん [2017/09/21(木) 05:09:49.50 ID:t8iqXrAz0.net]
質問です。

{ 10/*%*/ } = { a,b,c };

というのは、
a = 10%
b = 10%
c = 10%
なのでしょうか?それとも、
a+b+c = 10%
なのでしょうか?

768 名前:デフォルトの名無しさん [2017/09/21(木) 05:48:27.92 ID:eSaSp7RC0.net]
C++を習得するのに莫大な時間を費やしました。

C++のプロフェッショナルなプログラマーになりたかった。

なのに、ハード系の知識が無いと言う理由で、もらう仕事はVB.NET、C#.NET系ばかりでした。

769 名前:デフォルトの名無しさん [2017/09/21(木) 05:51:26.56 ID:eSaSp7RC0.net]
質問を書くのを忘れやんした。

C++の仕事ってハード系、通信系、制御系以外、通常業務のシステム開発はないんでしょうか?

770 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 06:00:29.19 ID:Bo0/1phe0.net]
ポート重複で同じアドレスでBananaサーバーみたいなラックマウントサーバーの仕組みってあれは一つのサーバーがlistenで待って接続してきたクライアントの処理を複数の子サーバーに割り振っているだけなのか?



771 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 08:18:42.29 ID:E1HbcZFyr.net]
struct unko { unko()=delete; };
int main() { unko u{}; }

何故コンパイルが通るのかを理解するのに半日かかった
やはりこの言語はクソ

772 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 08:46:59.52 ID:iktVOuYO0.net]
>>746
他人から降って湧いてくることしか期待してないからそうなる
自分がやりたいことは自分で始めろ

773 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 10:13:00.29 ID:JjsSVLys0.net]
>>747
C++はC#とかでできないことがあるときに仕方なく使うイメージがある

774 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 11:36:34.81 ID:p6kNBh4ir.net]
>>749
あれ
何で動くんだ?
plain old dataあたりの話が噛んでる?

775 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 12:35:00.95 ID:iktVOuYO0.net]
C#の方が楽なところが特に無いのでC#という選択肢が無い

776 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 13:21:38.51 ID:TbHBi0+x0.net]
>>752
PODがかかわってる部分はあるけど基本として理解しておくべきことは
=default,=delete指定はコンストラクタの宣言でも定義でもない
ということ

つまり>>749の文脈では
struct unko { unko()=delete; };
int main() { unko u{}; }

struct unko {};
int main() { unko u{}; }
と等価でありuはaggregate初期化されコンストラクタは呼ばれないからエラーにならない
(unko();みたいにはっきりとデフォルトコンストラクタが呼ばれる状況ならエラーになる)

777 名前: mailto:sage [2017/09/21(木) 16:15:38.61 ID:na02B6ss0.net]
>>750
お、おう!

778 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 17:36:23.55 ID:E1HbcZFyr.net]
>>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ではないと見なされている(たぶん)

779 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 22:11:37.04 ID:VzX3yrPwM.net]
>>748
パケットレベルで振り分けたり、プロキシとして動作したり色々
ロードバランサ 仕組み
とかでググるがよろし
あとそこまで行くと完全にスレチなので

ネットワーク
mevius.2ch.net/hack/

とかに行っとくれ

780 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 23:20:34.43 ID:Bo0/1phe0.net]
ほほう



781 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 11:36:40.13 ID:2CJ5RW/30.net]
>>747
20年前は普通にあった、ていうかそれしか方法がなかったが
今はもっと楽な方法があるのでほぼ無くなった

僅かな例外はパフォーマンスを求めるようなプログラムを作る場合だが
それでもライブラリなどの表から見えない部分の作成に限られる

782 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 21:53:53.16 ID:DdQqqOWmH.net]
各添字が 1 から X まで動く多次元配列を一次元で
A[i + X*j + X*X*k]
のように表しているのですが、この多次元配列の各添字を入れ替える操作を頻繁に行うので、関数にしたいです。
どのようにするのが良いでしょうか。

たとえば
f(A, B, 2, 3, 1);
のように引数をとって B という配列に
B[j + X*k + X*X*i] = A[i + X*j + X*X*k]
と要素を入れたいです。

「2, 3, 1」を関数の中で解釈する方法も分からなくて困っています。

783 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:14:21.88 ID:dWsmcDp10.net]
>>760
その例だと A[X][X][X] の3次元相当だけど3次元限定でいいの?

784 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:34:01.05 ID:qTNnvPi+0.net]
https://ideone.com/x9PCnt
こんなんでええやろ

785 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:36:10.87 ID:dWsmcDp10.net]
>>760
こういう解釈でいいかな?

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;
}

786 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:38:24.75 ID:cFmXNXGU0.net]
左辺が j, k ,i 右辺が i, j, k のようだが

787 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:45:31.08 ID:dWsmcDp10.net]
あ、一気に全要素にFillしなくてもいいのかな?

788 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 00:03:03.61 ID:7FyCscw80.net]
……素直に3次元の配列にすりゃあいいんじゃねえのかなコレ
どーーーしても1次元にしなきゃいけない重大な理由が背後に控えてんのかな?

789 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 00:08:42.25 ID:xnpjieyid.net]
普通にメモリ確保したら1次元だからな

790 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 00:21:25.13 ID:J5lzydll0.net]
B[ii][jj][kk] = A[i][j][k];
でも通るな



791 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 00:25:12.68 ID:QX+6yKIgH.net]
>>761
もちろん任意の次元を一度に扱えたら最高です。
ゆくゆくは各添字の次元を変えることも考えています。

>>762>>765
すみません。
全要素を並び替えたいです。

>>766
カラムメジャー、ロウメジャーを任意にしたいという背景があります。
また、各添字の次元が本当は任意であるということもあります。

>>763
ありがとうございます。
確かにこれで>>760はできそうです。
パーミュテーションの実装の仕方が分かりました。
原理的にはこれで任意の添字の数、次元に対応できる (それぞれ関数を作る必要はある) と思うのですが、もっとアカデミックな方法ともあるのでしょうか?

792 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 02:35:34.07 ID:0uAENq5F0.net]
>>769
アカデミックは知らんが一般化するなら
B[ i*bi[0] + j*bi[1] + k*bi[2] + ... ]
と各次元ごとの係数を変数にして設定だな
>>760のたとえばでは bi[0] = X*X, bi[1] = 1, bi[2] = X

あとはインターフェイスにあわせてヘルパ処理を用意すればいい
f(... int x, int y, int z)
int bi[3];
bi[x - 1] = 1;
bi[y - 1] = X;
bi[z - 1] = X*X;

793 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 17:29:12.46 ID:vw1eQBGxr.net]
>>770
ありがとうございます。
あとは任意個数の引数を取れるようにすれば添字がいくつあっても、各添字がどのように走っても一つの関数で対応できますね。
勉強になりました。

794 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 00:05:50.55 ID:KE0eJu6Z0.net]
C++とほとんど関係ないな

795 名前:デフォルトの名無しさん [2017/09/25(月) 10:20:39.11 ID:c/fcx1bx0.net]
任意個数の引数って、まさか省略記号と可変個数実引数では・・・
と思ったらモロじゃねえか おいおい
このスレ的にはinitializer_listやtemplate parameter packだろ

796 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 11:38:31.09 ID:VZWzPiEFd.net]
>>773
template parameter pack って variadic template と同じもの?
後者の呼び方には馴染んでるんだけど。

797 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 12:51:53.80 ID:ML1gBCAMM.net]
>>774
同じ

798 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 16:12:14.99 ID:b+XdOI/H0.net]
>>773
ほっといたっていずれ覚えるだろうに何故押し付けるのか

799 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 17:17:22.88 ID:RnBeI/QIM.net]
>>776
より良い代替案があるんだったらそっちに誘導すべきだろう。
実際使うべきじゃないし。

800 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 18:34:40.87 ID:iFpSSPyJr.net]
>>774
違う



801 名前:デフォルトの名無しさん [2017/09/26(火) 10:35:57.85 ID:DAuKDJeY0.net]
>>776
このスレ的にはって書いてあるのが読めてないのか
自分が苦手なものに触れられたくないのか
どっちだ?

802 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 11:02:34.83 ID:XbrOuhiT0.net]
>>779
最近お前みたいなニワカが増えてうんざりするわ
というかCの可変長引数がどこに出てきた?

803 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 11:38:28.30 ID:XSwUFkBD0.net]
つかぬことを伺いますが、
あるクラス内で定義した構造体を同クラス内でstatic constメンバとして宣言し、
外部で定義しようとしたところ、「〜との互換性がありません」と出て上手く行きません
どうすればよいのでしょうか

〜ヘッダ内
class Hage{
public:
struct A{
int a;
int b;
};

static const struct A M;

}

〜ソース内
#include "ヘッダ"
const struct A Hage::M; //不正

804 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 11:39:54.54 ID:XSwUFkBD0.net]
あ、行頭の半角スペース消されるの忘れてた

805 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 11:48:05.08 ID:XbrOuhiT0.net]
const struct Hage::A Hage::M;

806 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 11:48:55.33 ID:r3ztyMSNd.net]
>>781
少なくとも Hoge::A としなけりゃダメなんじゃないか

>>771を読んでもCの可変長引数とは決めつけられなかった

807 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 11:51:53.92 ID:XSwUFkBD0.net]
うわあ何でこんな初歩的なことに躓いていたんだアホらしい
>>783-784サンクス

808 名前:デフォルトの名無しさん [2017/09/26(火) 15:18:58.40 ID:SDiSqFpw0.net]
###HUM###
000-K,AZ,0,1,
001-KI,L,I.T,DEF,11.2,TE,F,0.12235,
002-EM,OBLA,7##END

809 名前:デフォルトの名無しさん [2017/09/26(火) 15:24:00.47 ID:DAuKDJeY0.net]
>>780
うわーおまえ、それ人に聞かなきゃ判んねえの?

省略記号は右端という初歩の初歩でミスりながら
ドヤってる笑い地獄が2日前あったんだが
突っ込めなきゃせっかくボケた芸人も泣いてるだろうな

810 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 16:32:49.03 ID:XbrOuhiT0.net]
>>787
まずはsageることから覚えような



811 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 16:36:37.77 ID:r3ztyMSNd.net]
>>773の「モロじゃねえか」がどっから出てきてるのか謎だ

812 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 17:08:16.18 ID:XbrOuhiT0.net]
多分Cの可変長引数なら右端以外にも書けると思ってんじゃないかな

813 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 18:55:18.16 ID:DXd+nok20.net]
こんなイメージかな?
#define X (100)

#define f(a,b,c,d,e) ((b)[(c)+X*(d)+X*X*(e)] = (a)[(e)+X*(c)+X*X*(d)])

814 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 19:31:39.64 ID:T9NefDHyr.net]
>const struct A Hage::M; //不正

初歩的でなく相当に高度な気がしてならない
規格の3.4.1/p7,p8,p14あたりを頭に入れていないといけない
「class NS::C;」のように何でも「::」を付ければ良いと言うわけでもないので

815 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 22:59:17.35 ID:pvKSJMRt0.net]
そうでもない

816 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 23:10:02.38 ID:28pSalnA0.net]
だってグローバルスコープにも struct A; が存在したらどうなるか?
って考えればすぐわかりそうなモノじゃんね

817 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 23:33:07.57 ID:QYZ1C1Pk0.net]
グローバルが優先される所と、グローバルよりクラスや名前空間が優先される所が入り乱れたこの言語で
どちらが優先なのかを正確に覚えてるのはかなりの変人である可能性が高い
https://ideone.com/RZTBk7

818 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 23:48:01.42 ID:piJXswiP0.net]
グローバルが優先するところなんてあったか?

819 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 23:48:58.27 ID:28pSalnA0.net]
>>795
その例ではいったんA::の中に入っているから B はA::B になるけど
>>781 のはそうじゃないからな。

820 名前:デフォルトの名無しさん [2017/09/27(水) 00:14:02.46 ID:LyDwKMB00.net]
>>788
おーいバカ、省略記号の位置の件はわかったか?
まさか789なみの重度池沼じゃねえよな



821 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 00:41:37.58 ID:lz0JexH90.net]
>>771>>770を参考にして新たに考えようとしてるじゃないか。
それを>>770のやり方でまんま行こうとしている、と解釈するのは悪意があるぞ。

822 名前:デフォルトの名無しさん [2017/09/27(水) 00:57:18.03 ID:LyDwKMB00.net]
だからって770の大ボケを正当化する法はあんめえ

823 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 07:53:47.82 ID:Ep3hxvTm0.net]
あんめえ

824 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 09:12:11.59 ID:nsBNhogE0.net]
>>800
お前まだ分からんのか・・・
>>770のどこが大ボケなんだよ
添え字演算子の中で二項演算子の後に省略記号書いて再帰的に計算させたり
パラメータパック(またはそれを含む式)も無しに引数の左端にいきなり省略記号書いたり
なんてのはCでもC++でも出来ないの
お前みたいにCの可変長引数もvariadic templateも分かってるつもりなら
>>770を見た瞬間にこれは文面上の省略であって動くコードではないと一瞬でわかるはずなんだよ

質問でもないのにageまくるわ自分も初心者のくせして同じ初心者(あるいはそれ以上)を聞きかじりの知識でバカにしようとするわ
憂さ晴らしにしか利用しないのなら出ていけ

825 名前:デフォルトの名無しさん [2017/09/27(水) 09:30:35.39 ID:LyDwKMB00.net]
文面上の省略だっておw
大ボケに苦しい言い訳を上塗りして
アフォから超アフォに進化したなあ

826 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 09:41:27.37 ID:nsBNhogE0.net]
>>770じゃないよw

827 名前:デフォルトの名無しさん [2017/09/27(水) 10:03:04.41 ID:LyDwKMB00.net]
どう見ても770だな
必死さの理由が他にない

828 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 10:19:41.03 ID:Ls/Jbx6+0.net]
ワッチョイも知らないアホじゃん

829 名前:デフォルトの名無しさん [2017/09/27(水) 11:12:43.27 ID:LyDwKMB00.net]
驚いた、ム板にIP信者がいるとはね
嘆かわしい限りだ

830 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 11:41:32.93 ID:/eBNIii1d.net]
>>800
だったら>>771をターゲットにすればよかったんだよ
お前は>>770をも貶し続けていると見なされていたんだよ



831 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 11:42:15.16 ID:/eBNIii1d.net]
>>808
間違えた、逆だ []
[ここ壊れてます]

833 名前:デフォルトの名無しさん [2017/09/27(水) 14:47:33.57 ID:LyDwKMB00.net]
大ボケ+言い訳+IP信者+錯乱

この安定したアフォぶりは、どう見ても同一人物だなw

834 名前:デフォルトの名無しさん [2017/09/29(金) 01:30:30.30 ID:ppl3WHHK0.net]
%%%3%%%
000-DOK<NAZE-0.8112162>
001-3800%\73NMB/1,81,2,NB"IKKI"%
002-91.81%ML7"8.122231746668193,43@ML.4@"%^23.1444
003-1.33321444718%"YLD""SO"%{71.%{62.1339816{331.422231765%<<<NL6
004-LOOP%Go To"000"%

VCL

835 名前:デフォルトの名無しさん mailto:sage [2017/09/29(金) 22:15:16.68 ID:7WUGaaf40.net]
javaやc#しかやったことないような人間がc++でもメモリ管理をきちんと身につけるには何から始めるのが手っ取り早いでしょう?

836 名前:デフォルトの名無しさん mailto:sage [2017/09/29(金) 23:55:16.07 ID:7WUGaaf40.net]
そもそもみんなc++で何してるの?🤔

837 名前:デフォルトの名無しさん mailto:sage [2017/09/30(土) 00:49:06.72 ID:Yf3yOiqk0.net]
人工知能ゥ・・・

838 名前:はちみつ餃子 mailto:sage [2017/09/30(土) 00:56:27.58 ID:H54Xn+Px0.net]
>>812
C++ ではなるべくスマートポインタを使って自動化すべきなんだけど、
その内側にあるメモリの気持ちを実感として持つには C の範囲で色々やってみるのもいいかな。

839 名前:デフォルトの名無しさん mailto:sage [2017/09/30(土) 01:18:37.51 ID:bL0j7tMv0.net]
>>812-813
JavaやC#が選択肢になる状況でC++を選択する理由はない。
今C++を何に使うか決まってないのなら、JavaやC#を極める方向に努力した方がいい。

840 名前:デフォルトの名無しさん mailto:sage [2017/09/30(土) 01:39:01.97 ID:zjlhf9G/0.net]
VisualStudioでMFCのSDIテンプレートを作ると、ドキュメントクラス、ビュークラス、アプリケーションクラス、メインフレームクラスができますが、
これらのポインタを初期化時にグローバル化しておいて、以後あらゆるクラスから気軽にアクセスできるようにしとくのは良くないんでしょうか?
グローバル変数はあまり使うべきではないという考えは置いておくとして、動作上問題は起こるのでしょうか?



841 名前:デフォルトの名無しさん mailto:sage [2017/09/30(土) 09:54:39.91 ID:1M7A4t/A0.net]
まあたまには口ですることもあるかな…

842 名前:デフォルトの名無しさん mailto:sage [2017/09/30(土) 16:24:19.18 ID:EIEZdyCfd.net]
問題が起こらないように作れば起こらない
としか言えない

843 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 00:09:52.37 ID:A+1idbvt0.net]
MFCのtheAppには100万回ぶち切れてきたけど動作上は特に問題は無い

844 名前:デフォルトの名無しさん [2017/10/01(日) 04:08:21.65 ID:EFR2vscz0.net]
あーこの人、こうやっちゃったんだ(ニヤニヤ
しながら使うもの
ARM C++ベースなんで同情するところもあるけどね

845 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 11:18:29.65 ID:coFT7XLp0.net]
グローバル変数だからといって頭ごなしにぶち切れるのもいかがなものか…
CPU視点でやるべきことに対して処理順序にあいまいさが生じないなら実行上問題無いし、
プログラマーの視点で管理できる個数なら実用上も問題無い
同一クラスの複数インスタンスが欲しければグローバルな配列にしたらやり過ごせる

ていうか仮にtheAppを根とする木構造で全てのデータを管理することを思い立ったとして、
その木の根付近をぶち切って得た2〜3の大枝をグローバル変数を根とするそれぞれ別の木にする、ぐらいの
挿し木設計は設計上のショートカットとして許されるべきや
というのは、プログラムのあらゆる箇所で
 theApp()->getMemberA()->getMemberAA()->getMemberAAA()->...->getMemberZZ()->getValue()
と書かねばならなかったものが、
 g_dataAA->...->getMemberZZ()->getValue()
ぐらいで済む

846 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 12:31:41.44 ID:A+1idbvt0.net]
平気でグローバル変数を使う奴はtheAppの混じったコードを使いまわし続けて大量にデータを持たせるようになる
そして結合しまくりのクラスを他のソフトにコピペしていつのまにか神theAppができある
マルチスレッドで読み書きしてるもんだから予想外のバグが起こる
上司はそれでそれが当たり前だと思ってるから同じようにしろと俺に命令する
俺切れる

847 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 12:47:25.61 ID:coFT7XLp0.net]
>マルチスレッドで読み書きしてるもんだから予想外のバグが起こる
これはグローバル変数でなくとも起きる設計なら起きるから別件
ていうか
>CPU視点でやるべきことに対して処理順序にあいまいさが生じ(>>822)
ているケースにあたる

非同期呼び出しの同期化は呼び出される側のクラスで解決すべき、というだけ
メソッド内で完結できれば最も安全
パホーマンスや処理の粒度の関係でそれが適さない場合は
トランザクション処理をちゃんと設計汁、

848 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 12:50:48.09 ID:+enXMbbO0.net]
>>823
アプリケーションの中で寿命の長いデータはどこにどうやって置いてるの?

849 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 14:12:37.21 ID:A+1idbvt0.net]
>>824
ちょっと足りなかったわ
マルチスレッドでかつ複数のクラスを跨って別々の場所で読み書きされているからいつどこで変更されるかわからないことが多々ある
そうなるとあちらを立てればこちらが立たずといった感じになり、きれいに書く気力が失われてさらに汚さが加速する

>>825
必要なデータだけを引数で与えるべき

850 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 14:15:44.38 ID:P+J8m3XL0.net]
グローバル変数で同期とるんじゃないぞ。そんなもので同期なんて取れないからな。
ちゃんとOSが提供する同期オブジェクト使えよ。



851 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 14:17:42.21 ID:LFbo+6zld.net]
どんな環境でもOSがあってしっかりした同期の仕組みが有るとか思ってるお花畑がいると聞いて

852 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 14:25:15.04 ID:P+J8m3XL0.net]
いやはや無知で申し訳ない。
マルチスレッド機能があって同期の仕組みが提供されない処理系があるならばご教授して頂きたい。

853 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 14:59:48.84 ID:8m985+fI0.net]
文脈上Windowsでの話なのははっきりしてるのに「どんな環境でも」とか

854 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 15:20:08.45 ID:+enXMbbO0.net]
>>826
>必要なデータだけを引数で与えるべき

引数を渡す側がそのデータをどこにどうやって保持すればいいのか、という問題が残るだけでは?

855 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 15:35:52.14 ID:7TdPvZgo0.net]
>>831
> 引数を渡す側がそのデータをどこにどうやって保持すればいいのか、という問題が残るだけでは?
再帰的にたどって行けばいいだけかと
プログラムの寿命とほぼ同じ寿命が必要ならmain( )で定義することになるだろうし

856 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 15:38:17.18 ID:P+J8m3XL0.net]
どうしてもグローバル的なものがほしいなら、グローバルにしてしまえよ。
アクセス用の関数だけしっかり同期処理書けばいい。

857 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 15:41:47.38 ID:coFT7XLp0.net]
んまーマルチスレッド機能有りのOSであり
 (1) OSがプリエンプトしてくるのを止めるAPIが無い
 (2) ユーザープログラム独自に割り込み禁止命令を実行できない(特権命令違反でトラップされる
としたらユーザー側ではフラグのread modify writeのアトミック性を保証する術がまるきり無くなる

858 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 15:43:55.69 ID:coFT7XLp0.net]
いやすまん下記も追加
 (3) interlock系の命令が使えない(特権命令違反か何かでトラップされる
(3)は使えるかな普通…
>>829のは杞憂かもしれんな…

859 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 15:51:28.11 ID:coFT7XLp0.net]
しかしまあ同期処理はOSが提供すべき(理念としてだけでなく、その方が効率よく実現できるから
というのは同意
マルチスレッド機能があるOSなら必ずプリエンプトされないコード範囲を持つので、そこでなら
interlock系の命令を持たないZ-80みたいなCPUでも何も問題なくアトミックなread-modify-writeができる、

860 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 15:52:05.08 ID:7TdPvZgo0.net]
>>834-835
Compare-And-Swapとかの命令が特権命令になってるプロセッサなんてあるんだっけ?



861 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 15:59:29.84 ID:coFT7XLp0.net]
>>837
Interlock系命令の意味で言った
正しい言葉使いかは知らん…!

862 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 16:05:24.82 ID:a+6SxdIf0.net]
atomicなread及びwriteが使えるならmutexを構成できるし、それを利用すればread modify writeも可能だよ。

863 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 17:15:48.85 ID:zBOS+jx9M.net]
ミューテックスが何だって?
くだらねえ話しやがって・・

864 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 17:18:14.77 ID:A+1idbvt0.net]
>>831
どんどん上にたどっていく
そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい
externした変数はそのクラスが所有権を持っていることと同等なので、パフォーマンス上の都合が無ければ極力共有は避けるべき
あとコードを使いまわすときにも障害になる
ファイルにまとめて他でincludeしてもそのまま使えない

865 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 17:46:49.19 ID:+enXMbbO0.net]
>>841
>そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい

クラスが持つっていうのはそのクラスのスタティックメンバにしろという意味?
それでは結局グローバル変数とか無名namespace内変数とあまり変わらないような気がする。

866 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 18:21:24.53 ID:A+1idbvt0.net]
>>842
言ってる意味がわからない
クラスA内クラスBとCを宣言して

B b;
C c;
c.set_data(b);

だとか

main関数内で

Dptr d_ptr = D::get_resource();
Eptr e_ptr = E::get_resource();
F f(d_ptr, e_ptr);
f.excute();

とかこんな風にする

867 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 18:30:22.24 ID:+enXMbbO0.net]
>>843
んー

>そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい

「あるいは」ってどういう意味?

main関数内に持つ方はわかるんですよ。
そうでなく、「クラスが保持」の方の解説をお願いしたい。ずっと保持し続けるんだから
スタティックメンバなのかな?と思った。

868 名前:817 mailto:sage [2017/10/01(日) 18:34:27.58 ID:SWvA/SVx0.net]
>>820
では、例えば初期化時にtheApp内に、Doc、View、MainFrmクラスのポインタをメンバに持たせておいて、
以降、あらゆるクラスからtheAppを介してアクセスしてもよいということですね。

こういったやり方でふとよぎった不安なんですが、
長時間アプリを起動していたとき、とあるクラスの参照ポインタがいつのまにか変わっていて、
例えばビュークラスを取得しようと「theApp.GetView()」としたときにはすでにそこにViewクラスはいない。。。なんてことは起こりませんか?

869 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 19:04:09.96 ID:c8q3kohq0.net]
>>845
起こらないように設計する。

870 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 19:06:45.42 ID:A+1idbvt0.net]
>>844
普通なパブリックなメンバでいいと思うけど
その所有権をもったクラスの寿命が尽きたら同時に開放される


>>845
もちろん参照元からは参照先の実態があることが保障されないのでよくある
特定のメンバの参照数が数百箇所になってたときは手に負えなくなったのでさすがに作り直した



871 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 19:24:06.85 ID:8m985+fI0.net]
「クラスの寿命」とかもう難しすぎてついていけんわ

872 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 19:38:58.01 ID:A+1idbvt0.net]
>>848
推敲とかしてないのである程度読み替えて言いたいことを汲み取ってね
そのクラスの変数の寿命な

873 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 19:42:13.70 ID:+enXMbbO0.net]
うん、寿命の長いオブジェクトをどうやって保持し続けるかっていう話なのにね

874 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 19:51:59.11 ID:P+J8m3XL0.net]
悩む理由がよく分からないが。適当な管理クラス作ればいいだけでは。

875 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 19:54:30.69 ID:+enXMbbO0.net]
>>849
寿命の長いオブジェクトをどうやって保持し続けるかがテーマなので、
「a というデータはクラスBのオブジェクトbに持たせればいい」では
じゃあそのbはどこにどうやって保持し続けるのかという無限後退に陥る。

普通のグローバル変数やシングルトン
theAppにぶら下げるの
mainの中に置く

一長一短あるのでそれ以外に何かないかなという話

876 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 20:03:44.13 ID:P+J8m3XL0.net]
別に永続化、シリアライズの話までしてないわけでしょ。
mainかグローバルの2択で推奨はmain、どのスコープからも見えてアクセスしたいならグローバルもありで終わりでしょ。

877 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 20:06:34.68 ID:+enXMbbO0.net]
>>853
あなたの意見は>>833以降ずっと一貫しているからいいですよ。

>>823の意見がわかるようでわかりにくい

878 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 20:15:10.00 ID:P+J8m3XL0.net]
MFC? H社のソフトのことかな?

879 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 22:22:01.91 ID:SWvA/SVx0.net]
>>846
>>もちろん参照元からは参照先の実態があることが保障されないのでよくある
ソースコードで意図的にdeleteとか、アドレス移動する命令をいれてなくても起こるんですか?
(ガベージコレクションみたいなことが)

880 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 22:50:35.76 ID:LFbo+6zld.net]
>>829
無知を謝る必要はない

マルチコアのDSPをOSレスで使うとか



881 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 22:54:38.73 ID:LFbo+6zld.net]
>>826
パラメータで渡すべき情報と
そうじゃない情報と
がある

882 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 23:00:12.89 ID:LFbo+6zld.net]
>>852
スタティックメモリ(グローバル変数など)
auto変数(スタックやレジスタなど)
OSやAPI側の保存領域(APIを用いた設定など)
ファイルなど

883 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 23:08:17.57 ID:A+1idbvt0.net]
>>856
起こるわけないが

884 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 23:28:49.53 ID:LFbo+6zld.net]
意図的じゃないdelete

885 名前:デフォルトの名無しさん [2017/10/02(月) 15:27:40.28 ID:jSh1mr/v0.net]
> プログラムのあらゆる箇所で
>  theApp()->getMemberA()->getMemberAA()->getMemberAAA()->...->getMemberZZ()->getValue()
> と書かねばならなかった

本当にあらゆる箇所に重複コードを書きまくっているとしたら相当なアフォだな
関数化かキャッシュするだろふつー

886 名前:デフォルトの名無しさん [2017/10/02(月) 17:30:53.86 ID:wJY11lw/0.net]
最近WindowsのほうでVSを入れまして、簡単なSTGを作って遊んでいるのですが、MacOSでもC++でSTGを作ることはできるのでしょうか?
Windowsでは、DxlibといったSTG制作に特化したライブラリがありますが、MacOSではどうなのでしょうか…?実際にMacでSTG制作の経験がある方、挫折した方の話をお聞かせください。よろしくお願いします。

887 名前:デフォルトの名無しさん [2017/10/02(月) 17:45:41.63 ID:M0wavUvt0.net]
DXLibがSTG制作に特化したライブラリ…

888 名前:デフォルトの名無しさん [2017/10/02(月) 18:07:53.55 ID:wJY11lw/0.net]
>>864
何かおかしなことを言っていたらすみません。
STG制作入門のホームページでそのようなことが書かれていたので、そう認識していた次第です。

889 名前:デフォルトの名無しさん mailto:sage [2017/10/02(月) 19:07:36.56 ID:SPyFybU20.net]
それはDirectXの薄いラッパなので何に特化しているとかはない
マルチプラットフォームで作りたいならOpenGLで作れ

890 名前:デフォルトの名無しさん [2017/10/02(月) 20:27:58.95 ID:wJY11lw/0.net]
OpenGLか…
難しそうだしまだ取っ付くべきじゃないような気がするんだけどそんなことはない?



891 名前:デフォルトの名無しさん [2017/10/02(月) 20:36:13.43 ID:/AEbHlJU0.net]
Valkan行こう

892 名前:デフォルトの名無しさん mailto:sage [2017/10/02(月) 22:38:15.66 ID:O4roxos+0.net]
>>845
それぞれアクセス関数が用意されているので馬鹿なことはやめなさい

893 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 00:06:57.08 ID:AOU4wQiN0.net]
>>862
黙れよキチガイ
theApp()はtheAppかthisの間違いだがそれは別にして
メソッドgetMenberA()を有するクラスから始まって、
メソッドgetValue()を有するクラスFooまでの全てのクラス
が完璧にカプセル化された設計の元で
theAppから配下のFooのメンバにアクセスするアクセッサは実質的に>>862な状況を呈する
これはもう完璧なカプセル化を諦めて途中までグローバル変数にする(挿し木設計)か
インライ

894 名前:涛W開による最適化を期待するぐらいしか手が無い []
[ここ壊れてます]

895 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 00:11:53.92 ID:AOU4wQiN0.net]
まあ神の視座に立てば完璧な抽象化を徹底してそんな深いアクセッサをいらなくすれば良いのだが
そんなことが最初からできるなら苦労は無い、

896 名前:デフォルトの名無しさん [2017/10/03(火) 05:23:10.92 ID:ZkSEHHAS0.net]
> カプセル化を諦めて途中までグローバル変数

ヘボ野郎

897 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 15:26:50.04 ID:tYdASm94H.net]
二次元配列の中身を1命令で一気に出力する方法はないでしょうか
いちいち2重ループかくのめんどくさいです

898 名前:デフォルトの名無しさん [2017/10/03(火) 16:01:22.87 ID:ZkSEHHAS0.net]
CならあるがC++では一般的な方法はない

899 名前:デフォルトの名無しさん [2017/10/03(火) 16:16:18.00 ID:vTZ8MAnuM.net]
>>874
Cでの方法を教えていただけると嬉しいです

900 名前:デフォルトの名無しさん [2017/10/03(火) 16:16:57.77 ID:vTZ8MAnuM.net]
すいませんIDかわりました
>>875>>873です



901 名前:デフォルトの名無しさん [2017/10/03(火) 16:20:42.09 ID:ZkSEHHAS0.net]
俺も暇なヤツだなw

template <typename T> void print_dim(T&);

template <typename T, int RANK>
struct print_dim_t
{
void doit(T& x)
{
for(auto& y : x) print_dim(y);
}
};

template <typename T>
struct print_dim_t<T, 1>
{
void doit(T& x)
{
for(auto& y : x) std::cout << y << ',';
}
};

template <typename T>
void print_dim(T& x)
{
print_dim_t<T, std::rank_v<T>> obj;
obj.doit(x);
}

902 名前:デフォルトの名無しさん [2017/10/03(火) 16:34:48.99 ID:ZkSEHHAS0.net]
#define print_dim(array, type) do_print_dim_##type((type *)&array, (type *)(&array + 1))

void do_print_dim_int(int *first, int *last)
{
for(int *p = first; p != last; p++) printf(" %d", *p);
}

903 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 16:54:32.30 ID:hqWXgVBV0.net]
暇じゃないので横着しました
int* it = (int*) mat;
for_each(it, it + ROW * COL, [](int i){cout << i << " ";});

904 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 18:26:58.85 ID:O2xwfga8d.net]
linuxの質問です
・koファイルからコマンドライン実行で実行ファイルを実行したい
どうやって実現するか調べてもわからなくてやり方教えて欲しいです
A --B みたいな呼び出しかたをしたい
・複数スレッドを立てているBプロセスを
全スレッドsleepにすることできる?

905 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 18:34:16.19 ID:O2xwfga8d.net]
>>880
親プロセスをスリープにできるだけでも問題ないです

906 名前:片山博文MZ mailto:sage [2017/10/04(水) 18:45:43.87 ID:HMkkIXOid.net]
system, execl, execlp, execle, execv, execvp, execvpe, spawn, popen, fork

907 名前:片山博文MZ mailto:sage [2017/10/04(水) 18:47:36.46 ID:HMkkIXOid.net]
sleep, usleep, nanosleep

908 名前:片山博文MZ mailto:sage [2017/10/04(水) 19:21:33.45 ID:HMkkIXOid.net]
解説が必要ですか?
はい/いいえ

909 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 19:29:13.24 ID:N0mfbhbs0.net]
>>880 上半分だけ
.ko ってデバイスドライバとかのローダブルモジュールじゃないかな。
動作中のカーネルにinsmodで組み込まなきゃ使えないと思うんだけど。

910 名前:885 mailto:sage [2017/10/04(水) 19:36:09.54 ID:N0mfbhbs0.net]
すまん、質問の意図を取り違えたかも。

カーネルモジュールの中から外部コマンドを呼びたいって話かな。
可能かも知れん、と言うかカーネルがコマンドを実行するのと同じ手順のはずだが、
具体的な方法はさっぱり分からん。役に立たなくて申し訳ない。



911 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 22:05:29.41 ID:O2xwfga8d.net]
>>884
とても欲しいです..

912 名前:.

>>886
カーネルオブジェクトから外部コマンド(実行ファイル)をコマンド形式で呼び出したいって意味ですね
[]
[ここ壊れてます]

913 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 22:07:13.92 ID:UdMKuk5G0.net]
ハッカーですね。

914 名前:片山博文MZ mailto:sage [2017/10/04(水) 22:16:13.63 ID:HMkkIXOid.net]
>>882に書かれている関数のそれぞれの機能を比較し、該当する関数のソース(in Linux kernel)を読んでみては?

915 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 22:19:51.52 ID:O2xwfga8d.net]
>>889
今解説読んでいてsleep関連が終わったとこ
exec関連多すぎて大変

916 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 07:00:51.51 ID:AZey7Nzq0.net]
>>880
ちょいと検索したところ call_usermodehelper て関数があるみたい。

917 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 21:41:51.13 ID:/Agpj2+3d.net]
>>891
今調べたら出てきました!
自分が望んだことできそうですありがとうございます

918 名前:デフォルトの名無しさん [2017/10/06(金) 09:41:37.58 ID:aNGBh62I0.net]
("a,b,c")とは、a,b,cの合計を表すのでしょうか?
それとも、a,b,c各それぞれを表すのでしょうか?

919 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 10:15:40.40 ID:tNPv5Oyi0.net]
ここの住人はソースコードをコメントで装飾するのに、どういう書き方をしていますか?
参考にさせて下さい

920 名前:デフォルトの名無しさん [2017/10/06(金) 10:26:06.63 ID:8EN3J+m8d.net]
doxygen方式



921 名前:片山博文MZ mailto:sage [2017/10/06(金) 11:28:24.20 ID:u49AV52wd.net]
>>893
ただのC文字列。

922 名前:893 mailto:sage [2017/10/06(金) 14:25:11.99 ID:aNGBh62I0.net]
>>896
ありがとうございました。

923 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 19:52:03.20 ID:sTEh17J80.net]
C++リテラル文字列だろ

924 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 19:54:12.06 ID:sTEh17J80.net]
いや、やっぱただの文字列か

925 名前:デフォルトの名無しさん [2017/10/06(金) 21:08:44.42 ID:vfMxTM1h0.net]
→ の意味教えて下さい。

926 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 21:15:27.43 ID:fyJ+AUec0.net]
そんなものありません。

927 名前:片山博文MZ mailto:sage [2017/10/06(金) 21:46:37.43 ID:u49AV52wd.net]
「ptr->member」は、「(*ptr).member」と同じ意味。

928 名前:900 mailto:sage [2017/10/06(金) 23:48:23.51 ID:vfMxTM1h0.net]
参考書の一部です
fast-uploader.com/file/7062856811993/

どう言う意味なのでしょうか?

929 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 23:52:15.96 ID:vfMxTM1h0.net]
本を読んでも
 structやunionが具体的に、どの様に動作してるのか分かりません。

930 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 23:58:13.70 ID:yrQN1jb/0.net]
基本の基本なので、
先ずは、小さなサンプル作って、実際に動かしてデバッガで追ってみる。
その上で、判らない事を質問すべき。



931 名前:デフォルトの名無しさん [2017/10/07(土) 01:41:08.30 ID:6wfQSWva0.net]
質問です
以下のコードがコンパイルに通りません
class Structure { public: std::string type; };
std::vector< std::unique_ptr<void> > data;

std::unique_ptr<void> structure(new Structure);
structure->type = "HogeHoge";
data.push_back(structure);

>g++ -Wall -std=c++11 -c hogehoge.cpp
>error: ‘std::unique_ptr<void>::pointer {aka void*}’ is not a pointer-to-object type
> structure->type = "HogeHoge";
> ^
std::unique_ptr<void>ではなくて、
std::unique<Structure>にするとコンパイル通りました
voidだとだめなんでしょうか エラーになる理由を教えて下さい

932 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 01:49:12.44 ID:IjrnmnS30.net]
>>906
anyつかえ。

933 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 05:28:19.29 ID:9j2tI+ab0.net]
>>900
こりゃ -> の誤植だな。
印刷屋さんがC知らなくて矢印記号と思ったんだな。
コード部分は執筆者が念を入れてチェックしなきゃね。

934 名前:デフォルトの名無しさん [2017/10/07(土) 08:30:30.38 ID:r58+Koxz0.net]
>>906
エラーメッセージに書いてあるだろ <

935 名前:br> structure->type = "HogeHoge"; の代入先がオブジェクトじゃねえぜと
おまえさんはvoid = char const*;をやろうとしたんだよ
[]
[ここ壊れてます]

936 名前:デフォルトの名無しさん [2017/10/07(土) 08:31:55.56 ID:r58+Koxz0.net]
あ、すまんちょいミスった
指摘できるやついる?解説頼むわ

937 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 08:41:11.20 ID:eyY86HOM0.net]
>>906
unique_ptrあんまりしらんから想像で書くけど
そいつがデストラクタまで管理したいからvoidじゃなくてちゃんと型渡せってことじゃね

938 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 09:00:22.02 ID:y2Dkbadu0.net]
>>906
> エラーになる理由を教えて下さい
void 型の変数なんてないから
そもそも何をしたいんだよ...

939 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 09:03:55.62 ID:7nonADk70.net]
unique_ptr<void>という型なので、
中にtypeというメンバーがあることがコンパイラからはわからない。

static_cast<Structure*>(structure.get())->type = "HogeHoge";
のように明示すればコンパイルだけは通るかと思ったんだが、
こっちだと>>911の問題に引っかかって、その前の行でエラーになる。

940 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 09:27:45.88 ID:7nonADk70.net]
>>913の最後の行は勘違いだった。
こちらの環境だと、unique_ptr<void>の時点でエラーになる。



941 名前: mailto:sage [2017/10/07(土) 11:35:23.13 ID:NngrEkye0.net]
unique_ptr<void *> だとどうなる?

942 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 11:58:47.95 ID:rHfSD+zL0.net]
>>913
delete できないからね
voidを渡すんならカスタムデリータもセットにしなきゃならない。

template <typename T>
struct vp_deleter {
void operator ()(void *p)const
{
delete static_cast<T*>(p);
}
};

std::unique_ptr<void, vp_deleter<int>> a(new int(8));

なら通った。

943 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 12:19:56.83 ID:jvf7kHO4M.net]
void型なんて定義もなければサイズもないから
素で使うがそもそもNG

944 名前:デフォルトの名無しさん [2017/10/07(土) 12:36:08.56 ID:6wfQSWva0.net]
>>907
anyは知りませんでした
stdじゃなくてboostにあるんですね つかってみます
>>909
つまり void*->type は void.type になるってことですね
voidポインタは使ったことなくて、あれから調べたのですが
アクセスする前にキャストが必要だと知りました・・
無知ゆえの初歩的なミスです 指摘ありがとうございます
>>911, >>913, >>916
スマートポインタなのでデストラクタを呼び出せるようにしないといけないんですね
カスタムデリータは知りませんでした コード参考になります

void型なのはStructureの他にもプリミティブ型とかも入れたかったからです
boost::any使うやり方とカスタムデリータ渡すやり方両方やってみます
皆さんレスありがとうございました

945 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 13:41:40.48 ID:j+yonEy7d.net]
ひとつのカスタムデリータでいろんな型をdeleteするってなら無理

946 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 14:16:25.95 ID:LB5EP+Z/0.net]
いまだにforkとthreadの動作の違いがわからない

947 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 14:17:50.50 ID:jvf7kHO4M.net]
ある配列がありそれを指定した順番で並び替えしたい

std::vector< any_struct_t > array; //これを並び替えたい
std::vector< unsigned int > index_list = { 3,8,6,0,2...}; //この順番にしたい

探しているんだけど適当なライブラリが見つからない
標準ライブラリに入ってたりする?
またはアルゴリズムが知りたい
出来ればswap回数が少ない方法が知りたい

948 名前:デフォルトの名無しさん [2017/10/07(土) 15:34:33.81 ID:cqowZFEsp.net]
配列もう一個用意してその添え字に移動するんじゃだめなん

949 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 16:00:10.47 ID:ZvmF6v7F0.net]
>>922
それが一番速そうだよね

950 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 16:14:50.00 ID:Mcd7mBScM.net]
std::vector<any_struct_t> ret(index_list);
std::transform(index_list.cbegin(), index_list.cend(), ret.begin(), [&array](auto i){ return array[i]; });



951 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 16:25:34.07 ID:jvf7kHO4M.net]
>>924
それタイプミスあります?
でももう一つ配列を用意してコピーする点では
他の方と一緒ですね

別配列を用意せず全てswapで済ます方法も作ってみましたが
これにはindex_listが更に2本必要になり
効率は別配列と変わらないと予想される結果でした

参考になりました
ありがとうございました

952 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 16:38:58.22 ID:Mcd7mBScM.net]
一行目初期化はsizeだった
すまん

953 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 16:55:14.57 ID:rHfSD+zL0.net]
>>925
別領域を全く使わずin-placeでかつ汎用性のあるやり方ってすごく難しそう。
でも不可能性の証明も難しそうなんだよな。

954 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 17:23:03.40 ID:9j2tI+ab0.net]
index_list に含まれる値がそれぞれ重複なく1回だけ出現とか、
いかにも破られそうな条件を暗黙に期待するライブラリ、
てのも変な感じだしねぇ。

955 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 17:39:38.90 ID:7nonADk70.net]
任意の置換は互換の積で表せるので、swap繰り返せばin-placeで可能。
rikei-index.blue.coocan.jp/senkei/teigi4senkei.html

956 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 17:47:14.55 ID:IjrnmnS30.net]
>>906
https://ideone.com/j7lHlZ
こういうことでしょ?

957 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 18:00:13.73 ID:rHfSD+zL0.net]
>>929
まだやってない場所どこだっけ?

958 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 18:14:41.26 ID:7nonADk70.net]
>>927
「別領域を全く使わず」を見落としてたすまぬ

959 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 18:35:30.53 ID:rHfSD+zL0.net]
「別領域を全く使わず」とはいっても、テンポラリの変数を1個とか2個の固定数だけ使うのは除く。

960 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 19:11:01.43 ID:7nonADk70.net]
屁理屈を言うと、index_listを壊していいなら、
以下の手順で別領域を使わない置換は可能。遅いけど。
for( size_t i = 0; i < array.size() - 1; ++i )
{
std::swap( array[i], array[index_list[i]] );
std::swap( index_list[i], *std::find( index_list.begin()+i+1, index_list.end(), i ) );
}



961 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 19:26:56.50 ID:7nonADk70.net]
おっと、index_list.begin()+i+1の「+1」は消してくれ

962 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 19:44:23.58 ID:rHfSD+zL0.net]
この話をきっかけに、std::next_permutation の仕様を見てみたが、どういう時に使うのかよくわからない。

963 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 20:14:16.81 ID:jvf7kHO4M.net]
流石にO(n)は維持しないと
厳しいと思います

964 名前:片山博文MZ mailto:sage [2017/10/07(土) 20:23:01.47 ID:vDiuGwTad.net]
お前ら、プログラム書くとき、普通にnoexceptを何回も書いてるの?

965 名前:片山博文MZ mailto:sage [2017/10/07(土) 20:25:42.72 ID:vDiuGwTad.net]
>>936
permutation を実装するときに決まってんだろ?

966 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 20:53:48.18 ID:Mcd7mBScM.net]
>>938
今までthrow()と書いてた場所には書いてるよ
むしろ、書いてないの?

967 名前:片山博文MZ mailto:sage [2017/10/07(土) 21:02:34.40 ID:vDiuGwTad.net]
>>940
コンパイラーのバカ。

968 名前:はちみつ餃子 mailto:sage [2017/10/07(土) 21:05:19.53 ID:JUuMz14c0.net]
>>918
any は C++17 で標準に入ったよ。

969 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 21:13:10.52 ID:x4ka+ayCr.net]
規格と規格じゃないものの区別も付かない低能はすっこんでて

970 名前:900 mailto:sage [2017/10/07(土) 21:13:19.89 ID:m/msdGTM0.net]
>>908
ありがとうございます。

いくら検索しても出て来ないので、困ってました。



971 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 21:17:07.24 ID:rHfSD+zL0.net]
>>939
わからんがな

972 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 23:13:09.50 ID:7nonADk70.net]
>>934
別領域を使わない置換に再挑戦。今回はO(n)のはず。
for( size_t i = 0; i < array.size() - 1; ++i )
{
size_t j = i, k = index_list[i];
while( k != i )
{
std::swap( array[j], array[k] );
index_list[j] = j; j = k; k = index_list[k];
}
index_list[j] = j;
}

973 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 00:16:09.42 ID:FGX6bPrh0.net]
>>9

974 名前:46
二重ループなのにO(n)なの?
[]
[ここ壊れてます]

975 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 00:28:37.42 ID:wi1g/BWB0.net]
後出しのようで心苦しいけどindex_listを壊すのはダメだと思う。
const参照で渡すインタフェースにできないという意味で汎用性条件を満たしていない。

976 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 06:22:19.14 ID:+SudLjvR0.net]
>>947
以下の2つの理由により、外側のループがn回まわる間に
内側のループの中身はたかだかn回しか実行されない。
1. 内側のループ内で処理済みのインデックスjに対し index_list[j]=j が実行される。
2. index_list[i]==i の条件が最初から満たされていた場合、内側のループは実行されない
要するに、内側のループを実行済みかのフラグとしてindex_listを使ってるだけ。
>>948
index_listを壊している時点で屁理屈なのは自覚しているんで、仕方ない。
一応、別配列にムーブする場合と比べると、
最初から正しい位置にある要素への処理が不要になるというメリットは有る。

977 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 11:20:44.83 ID:HosRocIl0.net]
>>928, >>948
ライブラリに対するオレオレ定義をいちいち開陳しなくていいよ、チラ裏にでも書いとけ

978 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 11:34:33.36 ID:+SudLjvR0.net]
駄目な理由が引数を壊すってことだけなら、引数を値渡しにしてやれば、
呼び出し時に勝手にコピーされるので問題ないはず。
壊していい引数を渡す時はstd::move()すればいいし。

979 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 13:39:35.60 ID:GUxnbDfL0.net]
引数がconst参照=引数の状態を変更しない(てか、できない)という意思表示
に対して
引数が右辺値参照=引数の状態を変更する(しても文句言うな)という意思表示
というのはアリ?

右辺値参照に対する理解が曖昧なんで漠然とよく分からない(何が分かって
ないかも分からないw)んだが、もっと別な意思表示方法もある?

980 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 16:07:31.29 ID:6tf5QjxV0.net]
ほ〜ん>>946の奴はちゃんと動いたわ;
ttps://ideone.com/6lwMOn



981 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 16:11:39.00 ID:6tf5QjxV0.net]
>>946の奴は要素[i]が内側のwhile()ループからは1回以上アクセスされないから確かにO(N)な気配、

982 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 23:25:19.93 ID:sIfqyVAH0.net]
右辺値参照はさっぱり意味わからんわ。

983 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:00:03.09 ID:U0LcPFS10.net]
右辺値参照というのは、関数f()へのT型データの値渡し時に暗黙のうちに行われる(C++03までは無条件に行われていた)
 (左辺値) = (右辺値)
という代入処理において、
当該代入処理後、右辺値が関数呼び出し元によって使われなくなることが明白なとき、
 左辺値へのコピー後、右辺値をデストラクトする
という処理に暗黙のうちになっていたものを、
 右辺値から左辺値への移動
と「も」書けるようにするためのしくみ

Tに効率の良いムーブコンストラクタ(か右辺値参照を引数とする代入演算子)を定義しないとメリットが生じない
ポインタに__restrictを付けるべきかどうか悩まねばならないレベルの人用
C++03でもコンストラ・デストラ呼び出し回数削減の最適化がかかって同じような効果になるケースが多々あるから
そういうのが信用できない神経質な人向け

※ 個人の感想です

984 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:09:56.49 ID:Ge9OzZ/lr.net]
それで>>952の質問の答えはどうなるんだ?

985 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:20:15.73 ID:U0LcPFS10.net]
>>957
右辺値参照には一時オブジェクトしか代入できない縛りがあるから_
関数fooを
 voiid foo(int&& x)
というバージョンしか定義していないとすると、
 int g_x = 10;
 foo(g_x);
がビルドが通らないのではないか;
一般的な使用を想定すれば、結局foo(const int& x)も定義必要

C++03までしか使ったこと無いから知らんけど;;

986 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:37:56.10 ID:nhJ4ZLVgM.net]
>>958
その場合はfoo(int(g_x));が通るから、必須ではないよ
コピーを外側で明示的にやらせることで、こっちのほうが責任が明確になるので好きという人もいる

987 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 10:15:14.60 ID:53KUOYPr0.net]
必然性の無い実装都合のシンクはクソ

988 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 17:26:43.28 ID:bLguG3ky0.net]
オブジェクトのコピーとかムーブのためにここまで言語仕様を複雑にしないといけないのか。おれにはさっぱり理解不能だわ。

989 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 17:57:29.04 ID:0USm99MRM.net]
俺も右辺値参照はどうかと思う
いらないよね

990 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 18:35:18.07 ID:3udUYydoM.net]
使わなくてもいいんじゃないか?
使ったことないから複雑に感じるだけで、そこまで複雑でもないよ



991 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 18:45:40.84 ID:UEIAYP2F0.net]
>>961
GCをもたない言語の宿命だから嫌なら性能を犠牲にするかGCを持つ言語を使えばいい

992 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 18:56:48.86 ID:QjIlXwNcM.net]
いやいやスマポがあるじゃない。
中級が多いプロジェクトならスマポ強制のほうが性能上がるんじゃないかと思う。

993 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 18:58:40.39 ID:8DJAJvC20.net]
個人的にはC++の言語仕様の暗黒面はほとんど「参照」が絡んでいると思う。

994 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 19:50:58.39 ID:3udUYydoM.net]
ADLとか部分特殊化のマッチとかのほうが、はるかに複雑で暗黒だと思う

995 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 20:54:40.71 ID:bLguG3ky0.net]
>>964
理解してないのでなにを指摘してるかさっぱり分からないが、
つまり、気取ってC++でGCっぽいことしようとして破綻してるわけだな。

996 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 20:56:32.03 ID:UEIAYP2F0.net]
>>968
> 理解してないのでなにを指摘してるかさっぱり分からないが、
わからないなら絡んでくるなよ...

> つまり、気取ってC++でGCっぽいことしようとして破綻してるわけだな。
全然違うし

997 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 20:56:47.16 ID:1ynB1O3m0.net]
>>967
そう思う。
そのへんは「ルール」でしかないけど、右辺値参照はそれ自体が左辺値参照とは違うひとつの概念だから理解可能

998 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 21:28:57.78 ID:iWLkHfj90.net]
右辺値参照なんか、破壊不可オブジェクトをムーブするときくらいしか使わないような。うにーくぽいんたとか。
それ以外は参照でいいし。

999 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 21:45:04.70 ID:Rk3/uNWr0.net]
右辺値参照の有用性を理解できない人間にとってはそもそもC++自体が無用だと思う
さっさと退散しなさい

1000 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 21:56:43.96 ID:bLguG3ky0.net]
ところでなんでそんなに一時オブジエクトを参照しなきゃいけないコードを書くの?
参照元を管理するのが面倒だから? そういう人は初めからGC言語使えばよくね? ということですか?



1001 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:03:17.69 ID:Rk3/uNWr0.net]
なんでとか言われても。。。
壊してもいい一時オブジェクトの場合、特別に効率的な扱いをしたくなるケースなんて山ほどある
それが分からないならC++なんて触らずにGC言語専門でやってればいいと思うよ

1002 名前:はちみつ餃子 mailto:sage [2017/10/09(月) 22:10:35.64 ID:GeS0S50a0.net]
そのあたりはトレードオフなんだよ。
そりゃあ気にせずに済むなら気にしたくないが、気にしなきゃならないときに出来ることがないのはつらいって話で。

1003 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:13:59.60 ID:0USm99MRM.net]
俺もわからん
左辺値参照ではなく右辺値参照を使った方が
良い状況ってどんなの?
あと唐突にガページコレクション出してるけど
何の関係があるの?

1004 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:24:17.86 ID:bLguG3ky0.net]
もしかしてC++で仕事したことないんですか?

1005 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:25:07.16 ID:1ynB1O3m0.net]
そりゃ右辺値を束縛したくてかつconst

1006 名前:左辺値じゃダメな場合だろ []
[ここ壊れてます]

1007 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:43:46.89 ID:0USm99MRM.net]
んー?
結局無いんでしょ?
使うべきシチュが
そうならそう言えばいいのに

1008 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:45:47.51 ID:jvobj8TT0.net]
>>979
classの初期化はどう?

1009 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:51:16.17 ID:UEIAYP2F0.net]
使うシチュエーションがない?
規格決める奴等が無駄にあーだこーだ言ってるだけとか思ってるなら病院に行った方がいいと思う

1010 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:54:00.89 ID:0USm99MRM.net]
初期化はどう?って言われても・・
右辺値参照で初期化するのがベターな状況は
浮かびませんけど



1011 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:55:12.55 ID:0USm99MRM.net]
>>981
と言いつつも
思い浮かばないんでしょ?
じゃあ君もワイと一緒ですね

1012 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:09:59.39 ID:1ynB1O3m0.net]
んん?
右辺値を束縛したい(一時オブジェクトだから左辺値としての実体はない)
けどconst左辺値じゃダメ(中身を変更したいから)
 ↑
これのどこにわかりにくい点があるというのか?
「RVOが保証されるようになったらいらない」という意見なら理解できるが・・・

1013 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:14:06.35 ID:1ynB1O3m0.net]
たとえば swap の実装なんか(素朴には)moveを3回繰り返すんだから
右辺値参照の有用性は明らかだろ

1014 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:16:20.29 ID:7RyTvmhPr.net]
>>973「なんでそんなに一時オブジエクトを参照しなきゃいけないコードを書くの?」
 ↓
>>984「右辺値を束縛したい(一時オブジェクトだから左辺値としての実体はない)けどconst左辺値じゃダメ」
 「これのどこにわかりにくい点があるというのか?」

これがアスペというやつか

1015 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:20:00.09 ID:1ynB1O3m0.net]
>>986

は?
>>979に言ってるんだよ

1016 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:25:56.07 ID:0USm99MRM.net]
>>985
これを右辺値参照Verに書き換えて
利点を示してもらえますか?

void swap(int& a,int& b)
{
int c = a;
a = b;
b = c;
}

void main()
{
int a = 1;
int b = 2;
swap(a,b);
}

1017 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:26:35.20 ID:1ynB1O3m0.net]
>>986
そっちこそ唐突に>>793>>984を唐突に矢印で結び付けてるけど大丈夫か?
お前の脳内の連想なんて誰にもわからないぞ

1018 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:27:28.76 ID:1ynB1O3m0.net]
>>988
利点はない
intだもの

1019 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:31:15.79 ID:0USm99MRM.net]
なら何なら利点があるの?
long long型ならあるの?
もう訳が分からないよ

1020 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:32:58.04 ID:1ynB1O3m0.net]
>>991
コピーコストの大きいコンテナだったら三回も代入したくないだろ?



1021 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:34:48.01 ID:jvobj8TT0.net]
>>982
もう使わないなら右辺値参照版のコンストラクタに渡したほうがいいじゃん
そしたら、コピーが起きなくて済むでしょ?

1022 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:41:18.28 ID:U0LcPFS10.net]
>>986
右辺値を束縛したい文脈ではかわりにconst左辺値で常におkなのでは…(ていうかconstはあってもなくても良い

>>985
T型データのswapは素朴にはT型データのコピー3回+破棄2回ぐらいが生じる
のでわ…

1023 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:48:51.82 ID:bLguG3ky0.net]
swapが頻繁に起こるような用途なら、なんではじめからポインタで管理しないんですか?

1024 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:49:46.71 ID:qIHa8iWG0.net]
一時オブジェクトもglvalueなんだから
T &に束縛できればよかった

1025 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:52:41.96 ID:jvobj8TT0.net]
>>995
ヒープじゃなくてスタックで処理したいから

1026 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:55:42.49 ID:0USm99MRM.net]
結局のところ
右辺値参照はコピーコストを削減出来るのが利点で
それぐらいしか使い道がないってことか

かつ、コピーコンストラクタよりムーブコンストラクタの方が
コストを軽く出来るクラスに限られると

struct a{ void* p; }; // これには効果が期待出来るが
struct b{ int p[65536]; }; // これには効果は期待出来ない

結論としては、やっぱいらねーやこんなのってことだな

1027 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:58:36.68 ID:jvobj8TT0.net]
後者も効果が期待できるよ
そして、コピーコストが削減できるだけってのは正しいが、いるかいらないかは人による

1028 名前:デフォルトの名無しさん mailto:sage [2017/10/10(火) 00:01:39.19 ID:O5j+wjNW0.net]
>>998

> struct b{ int p[65536]; }; // これには効果は期待出来ない

それはあんたがそんな構造をよく使うんなら正しい
よかったじゃないか、結論が出てw

1029 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 72日 12時間 33分 11秒

1030 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<267KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef