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


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

C++相談室 part119



1 名前:デフォルトの名無しさん [2015/08/31(月) 18:19:04.13 ID:NE3NvROE.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part118
peace.2ch.net/test/read.cgi/tech/1435970316/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
peace.2ch.net/test/read.cgi/tech/1439849418/

次期規格C++1zはこちら
C++14/C++1z 20
peace.2ch.net/test/read.cgi/tech/1410382924/

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

577 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 11:08:56.51 ID:BV7UhKgt.net]
C++のコードで参照渡しをやたらと多用する人がいますが、意図がよくわかりません。
ポインタの代替として使われているのでしょうか?

int hoge(Foo &foo);

再代入を行わない場合、普通にポインタ渡しでも意味は変わらない気がするのですが。
開発上の利便性を考えてのことなのでしょうか。
個人的な考察として、以下の可能性を想定しています。

1. "->"による値参照が嫌で、"."を用いたい。そのために参照渡しを多用している
2. オブジェクトの状態変化の可能性を示唆させるために参照渡しとポインタ渡しを使い分けている

578 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 11:21:34.67 ID:VY24hflb.net]
A a;
hoge(&a);
が面倒ってだけ

てか、C++ならスマートポインタ使え

579 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 11:21:55.29 ID:3TMmR4lP.net]
>>569
2の意味がわからんけど場合によってポインタで渡すより幾つか利点ある
null参照を渡せない
参照先を関数内で変更出来ない(ポインタでもconst付けりゃ出来なくする事出来るけど)

あと普通にポインタ渡しとか参照渡しを多用とか言ってるけど参照渡しは普通だから
むしろnullpointer渡すことが出来る時か文字列リテラル渡すときぐらいしかポインタ渡しは使わない

580 名前:デフォルトの名無しさん [2015/09/28(月) 11:26:57.20 ID:DQYQoyfG.net]
ポインター版の関数とポインターじゃない版の同じ関数を2回書かなくていいという意味もある

581 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 12:49:29.07 ID:4w+sdak1.net]
特別必要がない限りポインタ渡しなんてヤメレ

582 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 13:35:58.94 ID:BV7UhKgt.net]
レスありがとうございます。
C++の世界では参照渡しがデフォと考えた方が良さそうですね。

C++は他人のコードを眺める程度なのですが、
同じような用途なのに人によって参照渡しで統一している人やポインタ渡しで統一している人がいて不思議に思っていました。

583 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 13:47:22.82 ID:iX8okw0+.net]
メンバ変数を引数として渡す関数の場合、参照は使いにくい

584 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 14:26:10.97 ID:wVFkh7Dk.net]
>>574
はい、その通りです。
C++はポインタとプリプロセッサマクロの撲滅を目標の一つとして開発されています。
そのためC++ではポインタよりも参照が推奨されています。

C++であってもポインタを多用する人はいますが、
その人の勉強不足でCのポインタを引きずっているとも言えますし
C++の参照がポインタからの全面移行を促すだけの魅力が無いとも言えます

C形式のポインタを捨ててもらえるよう、C++は永遠に進化中です。

585 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 17:34:31.23 ID:rUo6g3/R.net]
例えば関数の引数なんかでオプション的な引数がある場合
(その引数があってもなくても関数が動作するような場合
例えばログ出力先の指定など)
ポインタだと楽なんだけどね
void runSomething(const std::string* log)
{
// log = 0なら何も出力しない
}
これってなんか横着せずに参照でやるべきなんだろうか



586 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 17:35:18.80 ID:rUo6g3/R.net]
上記constはおかしいな

587 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 18:47:53.83 ID:wVFkh7Dk.net]
>>577
俺ならデフォルト引数か関数オーバーライド使うかな?

参照はデフォルト引数出来たっけ?
ダメなら関数オーバーライドで。

String位ならデフォルト付き値渡し引数にconst付けてコンパイラさんお願いっ!てしちゃうかも

588 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 18:53:56.76 ID:VY24hflb.net]
オーバーライドじゃなくてオーバーロードやろ?

589 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 18:58:09.96 ID:XXoDc2O6.net]
>>577
ところでこの例の場合引数が省略された時に0が渡されるのは保証されてたっけ?

590 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 19:05:58.93 ID:4w+sdak1.net]
577の引数が省略されたらコンパイルエラーになることが保証されてるよw
NULLを渡されたら特別な処理をしたいならポインタ使ってもいいんじゃないか
俺ならそういう設計は可能な限り避けるけどな

591 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 19:07:49.95 ID:P8/hbuJG.net]
>>581
この例のままだと引数の省略は出来ない

void a(const std::string *s = 0);
とするか、意味は少し変わるが
void a(const std::string& s=std::string());
としてempty()の場合無しとして扱うか
俺は後者をよく使う

592 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 20:02:10.71 ID:91/ACm3S.net]
>>575
ん?
なんか面倒なことあったっけ?

593 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 20:07:14.94 ID:91/ACm3S.net]
>>582
> 577の引数が省略されたらコンパイルエラーになることが保証されてる

そんな保証あったっけ?

594 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 20:34:23.74 ID:tAj/1R7q.net]
もちろんです

595 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:21:10.12 ID:qXJ0fmsD.net]
>>570
何でもかんでもスマポにすればいいと言うわけではない
スコットメイヤー先生の糞本でも読んで出直せ



596 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:23:31.06 ID:1BrOiTcA.net]
うっせーハゲ

597 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:30:32.73 ID:AY6OxaHG.net]
>>583
>void a(const std::string& s=std::string());
void a(const srd::string& s = ""));
でええやろ

598 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:33:11.06 ID:mUEYl4pK.net]
スマートポインタってオーバーヘッドでかいでしょ
一度に大量の解放が起こると性能ガタ落ちだし
速度を追求するためにC++使ってるのに、本末転倒

599 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:35:19.98 ID:1BrOiTcA.net]
unique_ptrならいいだろ

600 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:38:52.17 ID:tAj/1R7q.net]
>>589
お前はいいかも知れないが
許容出来ない人も居るだろう

>>590
スマポのオーバーヘッドはアセンブリレベルで
マナポと完全に同一にまで改善されたというのが
ハーブサッターとスコットメイヤー教祖の教えなのだが
ただしunique_ptr<T>に限る

601 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:39:23.89 ID:ynPwQZO2.net]
つか、uniqlo_ptrしか使わんな

602 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:40:52.11 ID:ynPwQZO2.net]
///
unique_ptrだ
予測変換入ってもた

603 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:54:34.42 ID:FIIzSoGf.net]
つかstd::unique_ptrの構文が参照ではなくてポインタのそれである件について:

やっぱC++においては参照の方がおまけ概念
const T&以外の参照渡しは禁止

604 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:55:27.14 ID:0rYiKgaG.net]
>>583
>void a(const std::string& s=std::string());
>としてempty()の場合無しとして扱うか

おお、これでちゃんと動いた!
大抵はこれでどうにかできそう
良いこと聞いた

空文字列と文字列が無いことを区別して取り扱いたい時が稀に良くあるが
仕様変更できる場合が大半だな
文字列以外ではあまりないし

605 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:57:51.67 ID:mUEYl4pK.net]
>>592
いやでも、shared_ptrは遅いんでしょ?
unique_ptrが使える場面なんて限られてるし、片手落ちかと
だいたい、新技術を導入するか否かの決定権を持っている上の人たちは
長年生ポインタのやり方で染み付いている訳で、
便利だから乗り換えましょう、とはそうそういかないかと



606 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:57:53.72 ID:0rYiKgaG.net]
>>595
生ぽさえ撲滅出来ればそれでいいんじゃよ

607 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:01:49.61 ID:1BrOiTcA.net]
むしろshared_ptrのほうが使える場面が限られてる
遅いといってもshared_ptrのコストが問題になる場面なんてめったにないだろう

608 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:04:24.66 ID:tAj/1R7q.net]
ナマポをスマポに

609 名前:書き換えるときに
unique_ptrじゃなくてshared_ptrしかダメ
というのは作りが相当おかしい
[]
[ここ壊れてます]

610 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:20:39.17 ID:XXoDc2O6.net]
>>597
うちはナマポ使ってると、レビュー時にその必要性について議論させてるぞ

Cできちんとポインタを使いこなしていた人ほど
すぐにC++ではナマポ不使用派に転向しちゃう

基本、実績のある古いコードをそのまま持ってきた場合とシステムコールとかのC形式ライブラリ呼ぶところ位しかナマポは残らないな


shared _ptrが遅いというのは、ナマポで安全対策を入れていない場合と比べてだ
ナマポに安全対策を入れたら大抵はshared_ptrより遅くなるぞ

ナマポの方が速いと主張する人たちは
レビューとプロファイラーの前で生き残れなかった

ま、うちだけかもしれんが

611 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:24:13.61 ID:XXoDc2O6.net]
でもC++のスマポは記述が冗長なのが好きになれない

ナマポはレビュー時に見落とすくらいシンプルなのにね

612 名前:デフォルトの名無しさん [2015/09/28(月) 23:36:28.90 ID:FF3rjUqv.net]
動的記憶が前提だからね
あくまで用途はその範疇で

613 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:38:37.64 ID:FIIzSoGf.net]
いくらスマポが良いといっても
やめて!メモリの動的確保する気でしょう?
エロ同人みたいに

614 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:45:35.35 ID:0rYiKgaG.net]
う、、、ネタがわからん

615 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:55:41.35 ID:0rYiKgaG.net]
実際、スマポも生ぽもほとんど使わないな

メモリ操作はSTLのコンテナとイテレータにお願いしちゃうし

ポインタ渡しは参照使うし

型変換とかも名前付きキャストとunionでどうにかなるし



616 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 00:42:40.24 ID:0lZfHTgJ.net]
まあポインタでも参照でも好きなもんを使えばいいよ。プログラムなんて動けばいいのさ。

617 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 01:17:31.36 ID:HqSuUkpS.net]
こまけぇこたぁ
    いいんだよ!!
  /)
 // /)
`///  __
|イ二つ/⌒⌒\
| 二⊃ (●) (●) \
/  ノ/⌒(_人_)⌒  \
\_/|  |┬|   |
 / \  `ー′  /

618 名前:デフォルトの名無しさん [2015/09/29(火) 02:44:20.18 ID:NXR0Nytt.net]
よくねえよヴォケ

619 名前:デフォルトの名無しさん [2015/09/29(火) 07:18:55.18 ID:UCFlulCD.net]
ナマポの利点ってなんなの

620 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 08:27:03.26 ID:4NffsMzC.net]
働かなくても生活出来ること

621 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 08:30:36.21 ID:Y2fWXifr.net]
>>571
>参照先を関数内で変更出来ない
意味がわからない
codepad.org/mXQd0mNP
参照であっても参照先を関数内で変更できるようだが

622 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 08:42:57.14 ID:Y2fWXifr.net]
>>576
STLのイテレータをみていると、これはポインタと同じ使い方
本当にポインタを撲滅する気があるようにはみえない
codepad.org/gQY11puS

623 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 08:46:58.42 ID:GdgkSls5.net]
>>612
参照が示す場所と言えば良かったかな?
参照先の値を変更出来るのは当たり前だからわざわざコード書かなくてもいいよ

624 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:18:41.17 ID:kfE15Zdi.net]
C++になっても生ポインタを結局ばりばりに
使うのだよな・・・みんな。

625 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:38:09.16 ID:bCmPOTpj.net]
>>613
それはナマポ派のひとを取り込むためにわざと記法を似せてるんじゃないかな?



626 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:42:32.67 ID:2BMWd/g5.net]
どうしてもイヤならC++なんか手を引くべき

627 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:43:37.29 ID:bCmPOTpj.net]
>>614
よく分からんがポインタのアドレス値そのものを書き換えるってこと??

もらったポインタをfor文の中でインクリメントしてデータアクセスする以外の用途が思いつかないな

上記の用法ならイテレータの参照を渡すかのが普通だからわざわざポインタ使うほどのものでもないし

628 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:46:03.17 ID:bCmPOTpj.net]
>>615
それがC++の良いところでもあり悪いところでもある
清濁併せて飲み込んじゃう混沌さがC++らしさ

629 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:51:42.83 ID:GdgkSls5.net]
>>618
> よく分からんがポインタのアドレス値そのものを書き換えるってこと??

そう
変更出来ない事を(細かい事だが)メリットとして挙げてる
ポインタもconst付ければ変更出来ないけど面倒くさいからな

630 名前:デフォルトの名無しさん [2015/09/29(火) 11:25:09.86 ID:NXR0Nytt.net]
標準アルゴリズムはナマポ前提でそ
ナマポとイテレータを透過的に置き換えられるってだけで
ナマポ撲滅を主張するような作りにはなってない

631 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 11:39:27.99 ID:9FBYnxt5.net]
ポインタを使うて事にそんなにアレルギーがある人がいるんだ…
コードを全部配列で書いてもアレルギーでるの?

632 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 11:49:34.30 ID:Fziu4eIr.net]
>>622
Cかよと面倒臭い気持ちにはなる
んで、しぶしぶtraitsを書こうと思って、c++ array specializeでググる

633 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 12:13:37.73 ID:XovM8eOK.net]
生ポがわいてんのか

634 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 12:35:12.59 ID:Y2fWXifr.net]
>>614
ますます意味がわからない

>>571
>参照先を関数内で変更出来ない

できちゃってるよ‥
codepad.org/6rGzlzmc
参照を使っても呼び出し元に影響を与えないわけではないのだが、どういうメリットを強調したかったの?

635 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 12:37:23.78 ID:bCmPOTpj.net]
>>620
あ、了解。やっとわかった。

ポインタのメリットとして書き換え可能をあげてるのかと勘違いしてた

参照のメリットとしてアドレス値(?)が書き換わる可能性が無いと言うことね



636 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 17:06:50.42 ID:0lZfHTgJ.net]
参照はだいたい理解したんだが
&& と言うのだけが理解出来ないよ。

637 名前:デフォルトの名無しさん [2015/09/29(火) 19:52:43.47 ID:NXR0Nytt.net]
テンポラリへの参照

638 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 20:32:38.62 ID:rSzsIUwL.net]
new, deleteを生で書かないという前提なら生ポでいいじゃん

639 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 20:37:38.49 ID:XSRpVFiu.net]
>>627
右辺値への参照です
 int a=0;
 int & lr = a; //左辺値参照
 int & rr = 0; // 右辺値参照

 void f(int &); void f(int &&); //両方のオーバーロード
 f( a ); // f(int &)
 f( 0 ); // f(int &&)

 int g();
 int && rr2 = g(); //g()呼び出し結果は右辺値

640 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 20:38:39.97 ID:XSRpVFiu.net]
失礼
int && rr = 0; // 右辺値参照
だった

641 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 20:42:24.19 ID:XSRpVFiu.net]
class A {
 void f() &;
 void f() &&;
}

A a;
a.f();//f()&
(new A())->f(); // f()&&

642 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 20:59:50.06 ID:UeLWTQcw.net]
shared_ptrが遅いって言ってるやつはどの操作にとんなコストがかかるか理解して言ってるんだろうか

643 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 21:05:55.31 ID:Z5H58J48.net]
shared_ptrを使ってみて遅いと評価することと
どの操作にとんなコストがかかるか理解
することにどのような因果関係があるのでしょう

644 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 21:09:20.14 ID:VAPx39zG.net]
まあ、実際sharedは遅いよ。
それでも多言語のGCやらに比べればマシだけど。
要は機能豊富過ぎるんだよね。

殆どの用途にはuniqueで十分

645 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:00:15.35 ID:UeLWTQcw.net]
どの操作にどんなコストが掛かるのか知らないと効率的な利用が出来ないだろ



646 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:06:58.07 ID:xQzivTWI.net]
shared_ptrの効率的な利用のためにshared_ptrの仕組みを理解することと
shared_ptrをナマポの代替で使ってみて遅いケースがあると判断することに
何の関係が

647 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:13:09.38 ID:VAPx39zG.net]
実装の詳細は知らんけど
ナマポと比較して
shared_ptr1つ目生成時中間バッファ作成コスト、コピー作成時とコピー削除時に同期コスト、weakも入れた最後の削除時に中間バッファ削除コスト、
デリファレンス時ノーコスト

ってな感じじゃね。

648 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:13:19.41 ID:diX6sJrx.net]
(new A())->f() は f() && でなくf() & が呼ばれる
*(new A()) が左辺値だから

649 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:31:50.55 ID:mPnf6nOs.net]
>>636
こないだstd::mapのstd::setを使ったらスゲー請求書が来てびっくりした

650 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:46:20.57 ID:diX6sJrx.net]
そういやshared_ptrのカスタムデリーターってtype erasureしてる?
制御情報と別にさらに動的領域が必要になりそうな

651 名前:デフォルトの名無しさん [2015/09/29(火) 23:01:51.29 ID:NXR0Nytt.net]
>>639
だよな、俺も変だと思った
ビルトイン演算子の単項 * は常に左辺値を生じるわけで

652 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 23:17:58.28 ID:H886HULU.net]
shared_ptr使ったらいつのまにかuse_countが万単位になっててビビった

>>635みたいなバカは実測もしないでshared_ptrがGCより速いと勘違いしてんだろw

653 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 23:18:59.34 ID:OUPKSVtA.net]
万の共有してるお前がバカなだけ

654 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 23:27:46.40 ID:mPnf6nOs.net]
やっぱスコープを超えて生きつづけるような動的メモリ確保は悪
個数に上限がない上に、ソースコードの検索で実体を特定できない分グローバル変数より性質が悪い

1スコープ1画面すなわち25行未満とするの正義

655 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 23:35:18.44 ID:LyudXVtb.net]
2015年に於いて一画面が25行の環境の>>645
ムーブセマンティクス全否定だそうです



656 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 23:42:59.40 ID:mPnf6nOs.net]
動的メモリ確保を必要以上に有りがたがって多用する奴は
グローバル変数を多用するビギナー未満の存在、

チューリングマシンあたりからやり直せ

657 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 23:56:13.74 ID:VAPx39zG.net]
そりゃ実行時のデータで必要なオブジェクトの数や種類が変わらないなら必要は無いのだろうが。

658 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 00:49:17.79 ID:k73k1QZf.net]
>>638
make_shared使ったら中間バッファ作成コストは無くなる
その代わりweak_ptrを使った場合それが残ってる間も解放されない


あと、shared_ptrのコピー速度が問題になる程コピーするか?
そんな設計だと生ポインタだったら所有権の管理出来ないと思うんだが

>>643
糞実装というのは置いといてもshared_ptrの速度と何の関係が?
gcのある環境だと数万も参照持つ程長い間生きてるといざ解放するときstop the worldになる糞コスト高い世代のgcになるだろうけどな

659 名前:デフォルトの名無しさん [2015/09/30(水) 01:08:31.92 ID:YymjgiCr.net]
GCとshared_ptrの速度を比較する馬鹿がいると聞いてきました。
しかもネタじゃなくて本気で書き込んでるらしいと聞きました。

660 名前:デフォルトの名無しさん [2015/09/30(水) 01:44:40.15 ID:wkMyE1bD.net]
どっちが速いかって問題じゃないから
ここが通じないやつと話しても不毛なだけだよ

661 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 07:07:44.73 ID:L4DkDpWh.net]
>>630
分からん。
そもそも右辺値参照する理由は何ですの?

662 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 08:23:18.30 ID:FCo7WZBm.net]
>>652
ま、もったいないお化けの呪いです。

663 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 11:52:14.07 ID:Q1Di+uY9.net]
関数の戻り値を変数に受けずに直接ゴニョゴニョするときに有益

664 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 12:49:31.47 ID:4JsedgFo.net]
>>652
右辺値参照はパフォーマンス向上のために導入されたもので、参照先は、以後のスコープで使われる機会のない(デストラクトを待つだけの)一時オブジェクトと見なされる。

実際に使われる機会のないことはプログラマーが保証する

665 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 13:08:20.36 ID:vdDHGEBP.net]
>>652
右辺値参照が導入された第一の理由はmoveセマンティクスを実現するため



666 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 13:16:43.24 ID:L4DkDpWh.net]
分からん。c++以外の言語で右辺値参照と言う機構は有るんでっか?
もしc++固有の機構なら何でc++だけそんなもん導入する必要があるのですかい?

667 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 13:39:20.73 ID:VnaX2NHk.net]
C++はスタックにオブジェクトを確保するから

668 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 13:45:19.98 ID:VnaX2NHk.net]
いや、もちろんヒープに確保する事もできるんだけどGCが無いから

669 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 13:55:13.48 ID:XhnAqUEm.net]
unique_ptrのmoveコンストラクタの存在とコピーコンストラクタがないことでどういう効果があるか考えれば分かると思う。

670 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 14:19:24.56 ID:7iKwfO2h.net]
>>657
俺様的個人見解では
コピーでなくムーブで済ませるのは本来ならコンパイラやインタプリタの最適化ルーチンのお仕事

それを言語仕様上「いいか、絶対にコピーするなよ、絶対にだぞ!」
と明記することが出来るようにしたのが右辺値参照


ムーブできなくてコピーが発生するくらいならコンパイルエラーにしてくれ
俺(プログラマ)がムーブ出来るように手順を考え直すから
と言うことを&&でコンパイラさんに伝えてる

他の言語は「こまけーことはいいんだよ!」でできています。

671 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 14:28:06.26 ID:vdDHGEBP.net]
>>657
C++は他の高級言語と比べて高パフォーマンスであることを特に重要としてるから
プログラマの工夫で高速化できる機能が備わってる

672 名前:デフォルトの名無しさん [2015/09/30(水) 14:49:50.37 ID:R06l1h0q.net]
C++以外はすべて糞言語だから右辺値参照が無い。

673 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 21:51:39.92 ID:L4DkDpWh.net]
>>661
うーん、まだ分からん。

674 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 21:58:53.58 ID:lnfdPqWh.net]
コピーよりスワップのほうが早い場合があるだろ

675 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 22:00:11.74 ID:VnaX2NHk.net]
srad.jp/~taro-nishino/journal/507551/
これ読んで分らなかったらあきらめな



676 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 22:01:27.44 ID:k73k1QZf.net]
>>664
存在する理由が解らなければ使わなければいいよ
標準ライブラリを使ってるだけで割と恩恵受けてるから

677 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 22:16:34.76 ID:L4DkDpWh.net]
>>666
読んでいる途中で諦めた。明日再挑戦するわ…

678 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 22:19:44.01 ID:VnaX2NHk.net]
こんなやつ・・・

679 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 22:34:51.73 ID:IxoD0KLd.net]
>>666
『名前を持たないなら、それは右辺値"なのである』
その理屈で行くと*(new int)が右辺値になってしまうな

680 名前:デフォルトの名無しさん [2015/09/30(水) 23:35:15.70 ID:aEcL3JaV.net]
peace.2ch.net/test/read.cgi/internet/1401535906/107
  ↑ ↑ ↑ ↑ ↑ ↑ 

681 名前:デフォルトの名無しさん [2015/10/01(木) 00:18:26.56 ID:MrcZAfOx.net]
メンバ変数とメンバ関数の定義ってどういう順序で書くのが一般的なの?

【VC++方式】
publicメンバ関数
privateメンバ関数
publicメンバ変数
privateメンバ変数

【Google方式】
publicメンバ関数
publicメンバ変数
privateメンバ関数
privateメンバ変数


貴様らはどっちを使ってるの?

682 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 00:23:26.58 ID:W6dzHXP5.net]
全部パブリックだし無駄なアクセサとか作らない性質なんで関係無いですね

683 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 00:26:52.37 ID:yE0+l/d1.net]
統一されてりゃいい

684 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 00:28:09.19 ID:0eXwX1cj.net]
変数は全部上に持ってってる。
何で下に配置しようとするのか理解できない。

685 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 00:34:01.87 ID:e+Nqpsc9.net]
クラスを利用するときは変数なんて見ないだろう



686 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 00:43:09.13 ID:j4gRyYlh.net]
変数が上だな
つーかデフォルトprivateなのだから
そこから書くのが自然な気がする。

687 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 00:43:40.25 ID:P62utjXs.net]
何で上に持っていくのか理解できない

688 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 00:46:42.51 ID:KtuKSkrc.net]
ヘッダファイルが誰のためにあるのか考えろや

689 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 00:47:30.33 ID:W6dzHXP5.net]
これはね、
内部仕様を大事にする東洋哲学と
外部仕様を大事にする西洋哲学の
違いですね

690 名前:デフォルトの名無しさん [2015/10/01(木) 01:06:55.36 ID:W4wdkuI5.net]
>>635>>640の話をよくよく聞いてみたところ、彼ら、ソートを再帰で作ってたらしいです。
引数としてstd::shared_ptrを渡していたのでコピーコストが凄いことになっていたようです。
ソースを戴いたのでループに修正してあげたところ、かなり驚いた様子で改心していました。

691 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 01:17:32.02 ID:aA9UfTOs.net]
>>681
shared_ptrを引数として渡すならconst参照でいい

692 名前:デフォルトの名無しさん [2015/10/01(木) 02:12:38.73 ID:W4wdkuI5.net]
>>682

>>635の人ですか。
また何か疑問がわきましたか?

693 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 02:32:50.77 ID:aA9UfTOs.net]
>>683
ちげえよ

引数でshared_ptrを渡すならコピー渡しじゃなくて
const std::shared_ptr<T>& p
にしろ
その関数内で所有権が欲しいならその時にコピーしろ

694 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 02:52:40.21 ID:aA9UfTOs.net]
何でソートをオレオレ実装してんだstd::sort使えよとか他にも突っ込み所あるけどね

695 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 08:01:51.69 ID:ZyUEx0el.net]
つーかキチンと所有権管理の意識をしていたら、わざわざsharedを使う場面が殆ど無いことに気づくはず。



696 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 09:58:06.89 ID:LB18ex5+.net]
std::sortはpredを値渡しだが、少し複雑なpredのメンバにshared_ptrを持たせたことがあった。それが正しい判断だったのか余計な心配だったのか不明。

697 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 15:43:10.33 ID:mZxAmtu3.net]
faithandbrave.hateblo.jp/entry/20121116/1353047948
boost::threadのスタックサイズはthread::attributes::set_stack_sizeで設定できるようですが
std::threadではどのようにして設定するのでしょうか?

698 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 16:41:46.71 ID:lsGbndod.net]
You can't.

699 名前:デフォルトの名無しさん [2015/10/01(木) 19:19:35.56 ID:BUCLrkun.net]
Oh,no.

700 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 20:12:32.90 ID:LB/4icN7.net]
C++のクラスとか実は構造体なのだからデータ1stに決まってるだろ;
メンバ関数から書く奴は頭おかしい(もしくはclassとstructの明示的使い分けを説明できねばならない

まあ一応概念上は「手続きに与えるデータ」の側面(手続きがメイン)を強調したいときがstructで
それ以外はclassではある

701 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 21:11:20.09 ID:P62utjXs.net]
>>691
関係ない

702 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 21:21:12.13 ID:WeiZCb/T.net]
>>691
>もしくはclassとstructの明示的使い分けを説明できねばならない
互換性以外でstruct意味あるの?
自分のコードでは使おうと思ったことない

703 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 21:31:33.68 ID:QENZiec8.net]
使い分けなんか決まりが有るわけでもないし適当でいい。
それより「クラスとか実は構造体」なんてアホなこと言ってる奴は
早く病院行った方がいい

704 名前:デフォルトの名無しさん [2015/10/01(木) 21:35:17.70 ID:BUCLrkun.net]
構造体をクラスで特殊化しようとしたら出来なかったから同じではないみたい

705 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 21:39:07.38 ID:BshYJ+by.net]
TMPにはまってた頃はstructばっかりだったな。
データを持つなんてことは滅多にないし。



706 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 21:41:20.18 ID:QENZiec8.net]
「構造体」などという定義の不明な用語を用いる奴は
アビバに行ってエクセルでも勉強してた方がいい

707 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 21:55:36.66 ID:LB/4icN7.net]
>>692-695
structの実体は全メンバがデフォルトでpublicなだけのclassにすぎないと
ストラストロウpップ本のどっかに書いてあった

一方クラス名と構造体名は同ではないが理由は知らん

708 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:03:04.84 ID:QENZiec8.net]
「全メンバがデフォルトでpublicなだけのclassにすぎない」
そんな嘘つき本は
早く窓から投げ捨てた方がいい

709 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:21:18.99 ID:BshYJ+by.net]
親クラスがデフォルトでpublic

あとは何だっけ?

710 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:23:51.58 ID:+UnsXPfG.net]
classから/への継承ができない
POD型になれる(Cと共用することができる)

711 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:32:16.11 ID:CWBNpZAW.net]
classもPODになれるぞ

712 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:32:25.91 ID:LB/4icN7.net]
classにできてstructにできないこと(あるいはその反対)とは?
2011年の規格になるがn3337.pdfならタダでダウソできるので
classとstructの違いがどこに書いてあるか指摘してくれると嬉しい

713 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:35:10.94 ID:QENZiec8.net]
三つ前のレスも読めない奴は
早く眼科に行った方がいい

714 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:40:03.08 ID:LB/4icN7.net]
>POD型になれる(Cと共用することができる)
classもPOD型になれる
n3337.pdfのChapter 9より
>A POD struct109 is a non-union class that is both a trivial class and a standard-layout class, and has no
>non-static data members of type non-POD struct, non-POD union (or array of such types).
で、
>A standard-layout struct is a standard-layout class defined with the class-key struct or the class-key class.
なのである

classがCと共用できないのはそれはその通りだがC++内の話題か?

715 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:40:18.43 ID:o05Ai7EN.net]
>>686
unique_ptrは逆に、所有権のない生ポの代替にはならないところがなぁ。
前に誰かが言っていたけど、コピー不可の「ほぼuniqueな」shared_ptrがあったらよさそうなのにな。

・基本、コピー不可
・使いまわす場合はweak_ptr(相当のもの)で
・それをlock()して得られるのも「ほぼuniqueなshared_ptr」
・それをローカルスコープの外に持ち出すには明確な記述が必要なんで
非ユニークな期間の管理は容易

自分でも作れるかもしれないけど、なんか落とし穴があったりするかな?



716 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 22:41:52.40 ID:LB/4icN7.net]
>>704
で、classにできてstructにできないこと(あるいはその反対)とは?

717 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 23:12:05.84 ID:P62utjXs.net]
>>699
どこが嘘つきなの?

718 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 23:41:36.26 ID:YVTNhxF0.net]
>>706
それweak_ptr経由したら無限にコピー作れるよね

719 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 23:46:09.70 ID:BshYJ+by.net]
クラスのメンバとして「所有権は持ってるけどコピーは可能としたい。だけど

720 名前:自分でnew deleteを書きたくない。」
っていう一番素朴ともいえる需要にはunique_ptrもshare_ptrも答えてくれないんだよね。
要素1個のvectorを持てば目的には合うけど、それはちょっと。
[]
[ここ壊れてます]

721 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 00:09:17.73 ID:Ty2xSLut.net]
所有権の無いナマポはナマポでいいんじゃ。
getして作る物じゃないの?

722 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 00:12:30.94 ID:E6p9V3H1.net]
>>709
意図的にそうすることはできるけど、このポインタ使う人にとっては意図せずにそうなることを
防げれば十分でしょ、って理屈。

723 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 01:37:40.67 ID:qg2lMJZH.net]
使い道が良くわからない
unique_ptrでgetで良いじゃんって思う

724 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 01:42:57.88 ID:UOnaTtLl.net]
>>706 が言ってるのは「基本的にはいつ勝手に解放されてもいいけどlock中に解放されるのだけはやめてほしいweak_ptr」じゃないかな

725 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 01:53:10.11 ID:UOnaTtLl.net]
あるいは「必要なときだけ一時的に強参照に変えられるweak_ptr」か



726 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 02:04:44.52 ID:t/H9126e.net]
>>715
それただのshared_ptr

727 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 02:12:07.99 ID:UOnaTtLl.net]
>>716
そだね
今リファレンス読み直してみたけど、普通にshared_ptrとweak_ptrでいいじゃんと思ってしまった

>>712 の言い分もわからなくはないけど、ちょっと動機としては弱いよね

728 名前:デフォルトの名無しさん [2015/10/02(金) 03:28:41.26 ID:ONuETOP6.net]
weak_ptrをスレッド跨ぎに使うととても便利だぞ。

スレッドAからスレッドBに作業を依頼するとき、スレッドA内でコールバックする
オブジェクトをweak_ptrに入れてスレッドBに渡す。
スレッドBは結果を返す時、weak_ptrを一緒に返す。
スレッドAは結果が返されたとき、weak_ptrが生きているかどうかで処理を継続するか
破棄するか決定する。

729 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 04:11:04.12 ID:mB2ii6Jd.net]
>>718 C++ でおk

730 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 05:15:26.18 ID:XsCDb17v.net]
おれは生ぽ派

731 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 06:56:56.47 ID:K61YkWCE.net]
ちゃんと後処理できるならなんでもいいのではないかな

732 名前:デフォルトの名無しさん [2015/10/02(金) 07:00:41.57 ID:BtQI5LIk.net]
unique_ptrを使うべき典型的な例くだちゃい

733 名前:デフォルトの名無しさん [2015/10/02(金) 07:01:11.19 ID:BtQI5LIk.net]
shared_ptrの間違いでちゅ

734 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 08:06:56.11 ID:ZDJdmWRt.net]
>>723
>>687

735 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 08:13:15.20 ID:t/H9126e.net]
>>723
CopyOnWriteを実装する時とか



736 名前:デフォルトの名無しさん [2015/10/02(金) 18:07:26.95 ID:7Yht83rO.net]
C++ って実際どういうところで使われてるん?

737 名前:デフォルトの名無しさん [2015/10/02(金) 18:12:29.97 ID:TpeMyO1f.net]
基本的なソフト、ライブラリの多くはC++製だろ。
スクリプト言語とかもC++製が多くてC++なしでは実装できないのが多い。

738 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 18:41:39.93 ID:8WzixXxl.net]
webブラウザ

739 名前:デフォルトの名無しさん [2015/10/02(金) 19:07:51.07 ID:AwBeWBui.net]
Haskellで書きなおせば省メモリーかつ10倍高速になるという人もいるね。

740 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 19:16:46.43 ID:8WzixXxl.net]
>>729
やってから言えって話だな

741 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 19:47:03.73 ID:0lgmsqw8.net]
Haskellが省メモリだと…?

742 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 22:01:36.63 ID:PixdrOkR.net]
コードサイズが省メモリという意味では。
「関数型ならこんなにシンプルにかける!」って宣伝よく見るし。
ってか仕方ないことだけどC++がコードサイズ大きい

743 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 22:50:51.68 ID:oFtaSIUa.net]
>>726
3Dのゲーム開発はみんなC++だよ
C++じゃないと重すぎてまともに動かん

744 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 22:57:22.05 ID:w2Lswr2g.net]
>任天堂のゲームはこれまで,CやC++といったプログラミング言語で開発されており,
>そのため高いパフォーマンスを発揮していたが,反面,開発に時間がかかっていたという。
>このセッションではそれ以外の方法,つまりHTMLやJavaScriptを使ってWii Uの全機能にアクセスしつつ,
>より手軽にゲーム開発を行う方法が説明されるようだ。

745 名前:デフォルトの名無しさん [2015/10/02(金) 23:00:04.35 ID:TpeMyO1f.net]
それはないかと。ウェブブラウザで3Dしたり、3Dエンジン・ライブラリを呼ぶ形だと言語速度差少なかったり。



746 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 23:36:20.41 ID:dTb/cHoI.net]
C++使う目的がスピードなのは今も変わらないと思うが、RustやGoがいくら早くなろうが、C++は使われ続けると思う。
最適化にこだわろうと思った場合C++以外の言語では話にならない。

747 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 23:39:28.76 ID:07KUSVzt.net]
C++は柔軟性が抜群

748 名前:デフォルトの名無しさん [2015/10/03(土) 00:29:39.75 ID:mC8UjI5p.net]
Haskellが一番速いといわれてるけどな。

749 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 00:37:13.63 ID:TzdXrt85.net]
>>738
Haskellが一番速いという言葉に強い魅力を感じるのですが、数値演算では、C++やFortranと
較べてどれくらい速いでしょうか。
そもそもHaskellには、数値計算用の函数(三角関数、対数、指数などの初等函数)は
インプリメントされているでしょうか。そしてその有効桁数はどれくらいでしょうか。
少なくとも12桁できれば、16桁以上欲しいのですが。

750 名前:デフォルトの名無しさん [2015/10/03(土) 01:40:39.95 ID:F9VAPS7W.net]
Haskellはやめとけ。理想的なコンパイラが実現したらとかいう想定なんだろ?
現実では未実装で。
純粋関数型言語とそのコンパイラが完成されれば速いんだろうが。

751 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 01:48:15.69 ID:OaBps6Fz.net]
そんなに早いならHaskellの動画エンコーダーがあっていいはず

752 名前:デフォルトの名無しさん [2015/10/03(土) 01:48:36.78 ID:F9VAPS7W.net]
Haskell   自動並列化でググッた結果。





マルチコアでスケールするようになった Haskell2015年2月12日
Glasgow Haskell Compiler(GHC)は、関数型言語Haskellの主要コンパイラです。
GHCは(並列性に加えて)並行性を主要な目的として長年開発されてきました。
www.iij.ad.jp/company/development/tech/activities/haskell/


マルチコア時代の最新並列並行技術〜 Haskellから見える世界 〜 [PDF ...
www.iij.ad.jp/company/development/tech/techweek/pdf/141126_2.pdf


Concurrent HaskellおよびParallel Haskell
www.kotha.net/ghcguide_ja/7.0.4/lang-parallel.html


【Async】Haskellによる並列・並行プログラミングを読了した (2)【Concurrent】 | FiS Project
www.fisproject.jp/2015/08/parallel-and-concurrent-programming-in-haskell-2/


未来の並列プログラ ミング言語としての Haskell
ll.jus.or.jp/2008/slides/6/shelarcy.pdf

753 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 02:07:18.42 ID:4GRc9B1x.net]
URL貼るだけで自分の見解を何も述べられない低能は去れ

754 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 03:44:12.63 ID:RI5yhOba.net]
知らんHaskellは
しかしインタプリタ言語であるErlangがとある大規模並列案件についてC++より早く動いたという話をどっかで聞いた

そりゃー開発コストとバグのリスク(コードの読み辛さ)を考えずに最適化設計すれば最終的にはC++が勝つだろうけども

755 名前:デフォルトの名無しさん [2015/10/03(土) 04:40:55.15 ID:HrivTQ+h.net]
Haskellは強力な型システムのおかげでコンパイルが通ればバグが無いことが保証されるといわれてるけどな。



756 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 04:44:51.70 ID:mgovDRA4.net]
何その都市伝説

757 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 08:02:15.82 ID:I2+KZq9W.net]
>>744
Java以下の速度のErlangがC++に勝てるわけねーだろwwww

758 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 08:12:08.92 ID:I2+KZq9W.net]
Erlangが使われれる理由は速度じゃなくて、強力なフォールトトレラント性
Haskellは遅延評価がある時点で並列向いてない
触った事あればすぐわかるだろうに、本当に恥ずかしい奴だな

759 名前:デフォルトの名無しさん [2015/10/03(土) 08:47:05.87 ID:QGdOGmK1.net]
そう、Erlangは強力なフォールトトレラント性が特徴。
生命維持装置のような何十年も安定して稼働し続けなければならない物には
Erlang以外使えない。
エラーが起きた時点で国際宇宙ステーションの全員が死ぬことになる。
再起動も許されない。
そういったミッションクリティカルな場所で使うためにErlangが開発された。

760 名前:デフォルトの名無しさん [2015/10/03(土) 08:50:57.42 ID:QGdOGmK1.net]
Erlangの最大の美点は静的検査によりコンパイルが通ればバグが無いことを保証できる点。
この特長によってJavascript並みの安全性を確保できるといわれている。

これはC++では絶対に実現できない。

761 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 08:52:47.18 ID:OaBps6Fz.net]
>Javascript並みの安全性
ここ笑うところなのかな

762 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 08:53:15.81 ID:I2+KZq9W.net]
Javascript並みの安全性?
ポエムは自分のブログでやってくれよキチガイ

763 名前:デフォルトの名無しさん [2015/10/03(土) 08:58:23.08 ID:QGdOGmK1.net]
また、Erlangは強力な並列性を持ち、2000万スレッドのベンチマークが行われたこともある。
C++プログラムとの比較でErlangは文字通り2000万倍の性能をたたき出した。
これは大きな差であり、現在のスーパーコンピュータではErlangが主流となっている。

764 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 08:59:57.30 ID:I2+KZq9W.net]
ErlangがC++より型付け強いってのも笑うところ
名前以外全く知らないのがわかる

765 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 09:06:44.71 ID:I2+KZq9W.net]
あ、これ本物のキチガイだ



766 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 09:07:13.61 ID:eQmk9cX0.net]
>>750

Erlangはチューリング完全じゃないのか?

767 名前:デフォルトの名無しさん [2015/10/03(土) 09:28:38.72 ID:QGdOGmK1.net]
C++が負けたのがそんなに悔しいですか。

768 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 09:35:22.34 ID:hNjBKdKI.net]
あーくやしいくやちくてしょんべんちびっちゃうわー

769 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 09:37:58.97 ID:RI5yhOba.net]
>>747
gccと比べたら確かに遅かったorz
ttp://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=erlang&lang2=gcc&data=u64q
しかし事はユーザーが書いたコード断片の実行速度ではないのかも知れぬ、

>>748
>Haskellは遅延評価がある時点で並列向いてない
ぬんで?遅延評価しようがすまいがimmutableなオブジェクトだけの世界なら排他とか生じないんじゃ…

770 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 10:00:51.34 ID:I2+KZq9W.net]
>>759
Haskellの遅延評価はあらゆる物に適用される
で、サンク取り払ってメモ化される度に止まって逆説的に向いてないというオチ
ここらへんは自分で制御しようと思えばできるから
飽くまで他の並列化を前提とした言語と比べて向いてないという意味

771 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 10:37:40.95 ID:R/xGcqGB.net]
>>745
でもコンパイルエラーを突き止めるのに専用のツールが必要だったり
コンパイルが通るまでに半年かかったりするんでしょ?

772 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 10:42:17.61 ID:R/xGcqGB.net]
>>748-749
フォールトトレラントのおかげで
内部で死にまくってても見過ごしてるだけというオチじゃなかろな

773 名前:age [2015/10/03(土) 11:02:06.53 ID:xcjdOcxh.net]
Queueに関して教えて下さい。

queue<BYTE> fifo;

として定義した場合、pushできるfifoの最大の深さはどこで確認できるのでしょうか?
fifoに書き込まれているバイト数はsizeで確認できますが、
深さに関する事が調べたのですがどこにも書かれていませんでした。

用途としては、10MByte位のFIFOを用意しておいて、
fifoに半分位たまったら一括でファイルにライトする様な処理を考えています。

774 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 11:09:56.72 ID:OaBps6Fz.net]
深さとサイズがどう違うんだ

775 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 11:36:19.09 ID:UaQHAHfU.net]
その場合は、dequeを調べればいいんじゃないかな?



776 名前:デフォルトの名無しさん [2015/10/03(土) 11:38:25.79 ID:JIliozMV.net]
自分がハッカーかどうかわからないのですが
ハッカーになると自分はハッカーであるとわかるものなんですか?
それとも人に言われてはじめて気づくものなんでしょうか?

777 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 11:49:29.97 ID:UaQHAHfU.net]
ハッカーはハッキングします。
あなたはハッキングしましたか?

778 名前:デフォルトの名無しさん [2015/10/03(土) 11:52:29.29 ID:JIliozMV.net]
それはクラッカー

779 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 11:56:32.43 ID:y6+evVSu.net]
あたり前だ

780 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 12:05:26.41 ID:UaQHAHfU.net]
ハッキングによって入手した情報を悪用し、罪を犯すのがクラッカーです。
ハッカーは罪を犯すことを目的にハッキングはしません。

781 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 14:23:52.05 ID:bfkpTtOm.net]
まあ、俺クラスになると自分がハッカーだと自覚できてるな

782 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 14:45:00.58 ID:bKUFTYSg.net]
俺がこんなに強いのも…

C++関係ないね。

783 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 15:03:31.31 ID:6CgBohu1.net]
カーしか共通点無い

784 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 15:04:24.02 ID:6CgBohu1.net]
クラッカーの話題が出てたのか。スマン

785 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 16:05:55.00 ID:8AFtPGV4.net]
まあ、俺クラスになると自分が馬っ鹿ーだと自覚できてるな



786 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 16:08:13.17 ID:DbjSwrzl.net]
禿げてないとハッカーにはなれない

787 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 16:09:09.20 ID:4asnCA7K.net]
俺クラスになるとその点も問題ない

788 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 16:12:08.77 ID:H2im6CWF.net]
自作クラス最強説

789 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 16:46:46.05 ID:hZCkGPov.net]
やっぱりナビスコだな

790 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 17:03:29.86 ID:5Y3yXyVr.net]
C++使ってる時点で十分ハッカーだと思うけど。

791 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 18:24:19.53 ID:bfkpTtOm.net]
>>779
それはクラ…リッツとかオレオ!

792 名前:デフォルトの名無しさん [2015/10/03(土) 20:23:09.16 ID:HRif353B.net]
ハッカーの大部分が悪いことをするので、ハッカーは悪事を働く人を意味するようになった。
そこで、ハッカーたちはクラッカーという新しい言葉を作り、俺はハッカーだから
悪いことをしていないと取り調べで言うようになった。

793 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 20:24:08.26 ID:I2+KZq9W.net]
リンゴマークをこよなく愛する

794 名前:デフォルトの名無しさん [2015/10/03(土) 20:27:19.39 ID:25KCQVnt.net]
ハッカーの彼女ってペンギンだろ

795 名前:デフォルトの名無しさん [2015/10/03(土) 20:28:46.01 ID:HRif353B.net]
クラッカーという言葉を作って、犯人はクラッカーだと言うようになった。



796 名前:デフォルトの名無しさん [2015/10/03(土) 20:30:44.43 ID:HRif353B.net]
電話を無料でかける装置を50ドルで売った。
これは良く売れた。
マンハッタンのビジネスマンが一日に50台注文することもあった。
この利益でいくつかのフリーソフトウェアが完成した。

797 名前:デフォルトの名無しさん [2015/10/03(土) 21:34:06.93 ID:GmUX5JOa.net]
2つの矩形(XYWH)を覆う四角形Z(XYWHR)を求めるにはどのような計算式を書けばいいですか?

798 名前:デフォルトの名無しさん [2015/10/03(土) 21:40:46.15 ID:8iRLWTDj.net]
std:::min と std::max を使うと簡単だよ

799 名前:デフォルトの名無しさん [2015/10/03(土) 21:47:00.05 ID:GmUX5JOa.net]
>>788
矩形から矩形ならそれで出来ますが、矩形から傾きのある矩形を求める方法が知りたいです

800 名前:デフォルトの名無しさん [2015/10/03(土) 21:48:38.22 ID:DW8kiwr4.net]
ちょっと図で書いてみて

801 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 21:53:58.07 ID:wd3SBpbJ.net]
傾きありだと飼いは無数にあるから条件が必要

802 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 21:58:00.99 ID:8iRLWTDj.net]
>>789
これでどう?
動画も有るよ
sssiii.seesaa.net/article/194921654.html

803 名前:デフォルトの名無しさん [2015/10/03(土) 22:07:52.43 ID:GmUX5JOa.net]
シューティングゲームのすり抜け防止に使いたい
1F前の矩形+現在の矩形で矩形を求めて判定した後高速判定)、当たっていれば傾きありの矩形で判定したい(厳密判定)

804 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 22:18:40.75 ID:eQmk9cX0.net]
頂点8つだし、厳密なものでなくていいなら、最も遠い頂点間を長径とする長方形でいいんじゃないの?

805 名前:デフォルトの名無しさん [2015/10/03(土) 22:30:23.52 ID:GmUX5JOa.net]
線分でしてみます。



806 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 22:31:15.33 ID:RI5yhOba.net]
指定した点Pが凸多角形Xの内側か外側かはベクトルの内積で判定できるので、
凸多角形Yが凸多角形Xと重なりを持つかどうかなら、Yの辺を構成する全部の画素について上と同じことをやれば良い、

もし、YとXが非接触の状態から、Yの内側にXがいきなり飛び込むケースが在る場合は、
念のためXとYを入れ替えた判定もやる
単純にビットマップのANDでも取る方が幸せ鴨、

本当かどうかは知らん

807 名前:デフォルトの名無しさん mailto:sage [2015/10/03(土) 22:34:55.68 ID:RI5yhOba.net]
訂正
誤:単純にビットマップのANDでも取る方が幸せ鴨、
正:が、小さい判定領域であればそこまでやるより単純にビットマップのANDでも取る方が幸せ鴨、

808 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 01:30:06.66 ID:RUTa+wSI.net]
>>793
簡単
頂点を引き伸ばせばよい
uploda.cc/img/img56100238268d5.png
↑適当な図

809 名前:デフォルトの名無しさん [2015/10/04(日) 03:21:04.05 ID:ZIaV4muE.net]
>>798
そういう図は何で描いてるの?

810 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 04:42:29.50 ID:r2m0aNE2.net]
C++スレなんだからC++じゃないの
ちな、このレスもC++で書いてる

811 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 10:03:01.78 ID:J4whK/1Y.net]
JavaScriptの、isPointInPath のように、
その点が、図形のパス内にあるかどうか、判別できないの?


それか、RGBAのアルファ値の、250〜255を、
アルファ値として使わず、
物体の判定用フラグとして使うとか

812 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 10:06:56.41 ID:yZJnSbHB.net]
>250〜255を、アルファ値として使わず

30年前のC++使いが考えそうなクソ設計だな

813 名前:デフォルトの名無しさん [2015/10/04(日) 10:40:50.29 ID:+wQ6czRK.net]
内積で判定するのってどうやるの?

814 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 11:26:51.95 ID:r2m0aNE2.net]
>>803
言いたかったのは
ttp://www.nttpc.co.jp/technology/measurement.html
の「線分と点の位置関係の判定」の部分
(最後の方の簡単な式。前半の大量の式は内外判定ではなくて距離の算出方式の解説に費やされている。

だが、上の記事の第2回目にさらにいろいろ書いてあったわ;
ttp://www.nttpc.co.jp/technology/number_algorithm.html

世間は広大だわ、

815 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 19:47:31.94 ID:T8eNBhl9.net]
boost::geometry に何かないの?



816 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 14:18:19.75 ID:VFapxPBu.net]
VC++2015にて

std::map<std::wstring, std::wstring> testmap;
testmap[L"Hello"] = L"World";
const std::map<std::wstring, std::wstring>& testmap2 = testmap;
std::wstring val = testmap2[L"Hello"];

この4行目でC2678
二項演算子 '[': 型 'const std::map<std::wstring,std::wstring,std::less<_Kty>,std::allocator<std::pair<const _Kty,_Ty>>>' の
左オペランドを扱う演算子が見つかりません (または変換できません)

が発生するんだけど、要は「鍵と要素がwstring」で「constな」mapを上記のようにリテラル文字列で[]参照する書き方ってできる・・・?
const std::wstring ws = L"Hello";
std::wstring val = testmap2[ws];
とかやってもだめだった

エラーの詳細としては、mapのoperator[]に「wstring&」と「wstring&&」の両方があって曖昧だからNGらしい
そもそもconstなmapなのに要素変更にも使える[]を呼んでいるのがダメってことかいね?const外せば動くし

817 名前:デフォルトの名無しさん [2015/10/05(月) 14:26:27.32 ID:9/62paZL.net]
同じ質問が最近にもあったような

818 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 14:37:36.36 ID:VFapxPBu.net]
本スレの過去をmapで検索してもそれらしき件は見あたらず・・・(過去ログは読めない)

819 名前:デフォルトの名無しさん [2015/10/05(月) 14:41:46.58 ID:HSAikNuy.net]
>>806
testmap[L"jerk"];
これだけで副作用が生じるわけで諦めるしかあんめー

std::wstring val = testmap2.find(ws)->second;
あえてendが返ったか見てないけど、
それはoperator[]と同質の問題ってことで

820 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 14:43:47.49 ID:zntwOtDH.net]
std::mapはconst版( operator[](const Key&) const )は無いよ−。
キーがなかったら新しい値を挿入するという動作だから。
ja.cppreference.com/w/cpp/container/map/operator_at
findしましょ。

821 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 14:48:47.23 ID:VFapxPBu.net]
そうか、[]の時点で要素増えるからダメか

822 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 23:43:18.77 ID:EGogu2NJ.net]
C++の文法はクソだからな
コンパイラーが手を抜いてプログラマーが不利益を被る良い例だ

823 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 00:10:39.56 ID:1Ze1Ogug.net]
>>806 https://www.google.co.jp/search?q=std+map+at

824 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 01:05:09.41 ID:CpsQkQ9O.net]
C++の仕様がいい加減だからなのか、
regexのマルチライン対応なんかは、VCは対応でGCCは非対応だからな
行頭の^が文字列の頭になると行頭じゃえらい違いだよな

825 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 01:23:22.63 ID:EO5+cWSu.net]
STLに問題があるようだな



826 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 01:25:23.49 ID:eWd5i2Y2.net]
>>812
文法はあまり関係ないけど?
低脳が口挟んでも

827 名前:pかくだけだぞ []
[ここ壊れてます]

828 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 11:20:11.67 ID:k9h8FU3j.net]
むしろ文法があんなだから
コンパイラは手を抜けないとも

829 名前:デフォルトの名無しさん [2015/10/06(火) 11:54:27.84 ID:+syJpT4+.net]
文法じゃなくて意味が糞なんだよな

830 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 12:27:05.15 ID:Zn1/MkM8.net]
そうそう、mapで思い出したけど
テーブルって実行時に初期化したくないやん

ある程度の大きさのmapの初期化を出来るだけ実行時の生成コストを少なくするように記述するにはどうしたらいいのかな?

環境によって違うけど
構造体の配列とかだと、初期化子リスト付けとくと、.dataセクションに即値が書かれてて
初期化時にはそれをコピーしてポインタをセットして準備完了

それと同じようなことをmapでやって見たい

c++11だとmapでも初期化子リスト使えるからそれでいけるのかな?
何年か前にg++でコンパイルして.dataセクション見てみたけど当時はmapの即値になってるように見えなかった

c++03とかだとどんな手があるんだろう??

831 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 12:35:26.69 ID:k9h8FU3j.net]
そうそう、mapで思い出したけど
テーブルって実行時にメモリ使いたくないやん

ある程度の大きさのmapは実行時にメモリのコストが大きいけどどうしたらいいのかな?

https://research.preferred.jp/2011/07/stllike-containers/

832 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 16:00:02.92 ID:wWQ1shVW.net]
初期化はだって実行時じゃないか?

833 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 20:34:00.60 ID:hYLbQ3+q.net]
どうしてもdataセクションにそのままアクセスしたいのであればキーと要素を持つクラスをキーでソート済みの配列で書いてstd::mapのconstメンバ関数と同じものを持つラッパークラス書くとかかな

834 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 21:14:23.94 ID:mXRqVUnf.net]
>>821
要するに map を実行時に構築するんじゃなくてコンパイル時に構築しといて実行時はメモリーコピーだけにならんもんか?
っつーことでしょ
たまに俺もそう思うことがある

835 名前:デフォルトの名無しさん [2015/10/06(火) 21:27:26.34 ID:jUDOLtzl.net]
確かにねー
そんな気することよくあるよな
constexprなコンストラクタでどこまでできるのかと



836 名前:デフォルトの名無しさん [2015/10/06(火) 21:34:08.29 ID:MCB0h3nq.net]
シリアライズかデータベースつかえ

837 名前:デフォルトの名無しさん [2015/10/06(火) 21:37:47.97 ID:MCB0h3nq.net]
>>820の意図するところと、>>823は別で>>820は省メモリにしたいって話だろ。

838 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 21:54:53.32 ID:2Pt1OMoQ.net]
配列に入れて線形探索
要素数が小さいうちは線形探索はもともと他より致命的に悪いわけではないし
今日日のCPUならキャッシュと分岐予測とOOOの華麗な連携プレーを目の当たりにできる

839 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 22:43:09.92 ID:8+tr+OYB.net]
これは遅くなりそうだからってがんばってマップ作ったら
線形探索ゴリ押しの方が速かったことならある

840 名前:デフォルトの名無しさん [2015/10/06(火) 22:47:58.27 ID:Cu8Zkmdv.net]
二分検索じゃだめなの

841 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 23:07:19.25 ID:hYLbQ3+q.net]
std::sortもstd::lower_bound もあるんだからバイナリサーチぐらいしようぜと

842 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 05:07:06.28 ID:vlTfjNXN.net]
>>826
>>823>>819

> ある程度の大きさのmapの初期化を出来るだけ実行時の生成コストを少なくするように記述するにはどうしたらいいのかな?

の話だよ
データベースとか頓珍漢過ぎ

843 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 07:13:23.42 ID:JsRvQDZJ.net]
コードの工夫で初期化コストを改善するのではなく
データベースでの永続保存という別手法での改善方法もあり得ることを示すことが
それほどトンチンカンとも思えないが

844 名前:デフォルトの名無しさん [2015/10/07(水) 08:23:24.99 ID:PbTUGDDG.net]
mapはエントリーを追加できるんだからドンダケ待ってもそうはならないと思。

845 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 08:34:53.72 ID:q7nyuwNL.net]
>>832
なにを改善したいかも理解してないアホ w



846 名前:デフォルトの名無しさん [2015/10/07(水) 08:52:16.49 ID:d/PBWwg/.net]
static_mapみたいな名前になるんだろか。

847 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 09:44:01.58 ID:0iwSPjqO.net]
Rubyでは、Hashの要素数が増えていくと、再編成される

バケット数は、2の累乗付近の素数を使う。
つまり、倍々に増やしていく
8+3, 16+3, 32+5, 64+3, 128+3, 256+27, 512+9...

1つのバケットには、平均して5つの要素を入れる(衝突)。
11*5=55, 19*5=95, 37*5=185...

つまり要素数が、56, 96, 186...個になると、
バケット数を増やして、再編成する

普段、1万個の要素を追加するのに、8msかかるが、
再編成するタイミングでは、20msかかる。
要素数が増えていけば、もっとかかるだろう

848 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 11:02:09.32 ID:8pl0pVx/.net]
C++のスレでRubyとかアホなの?
環境も書かずに2msとかアホなの?
C++なら1万個追加で1msだ

849 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 11:19:07.99 ID:vH7WjwMJ.net]
昔、某オンラインゲームの支援ツール作って、プロセスメモリ上にあるVC++2008実装のstd::mapの
テーブルを直接アクセスするコードを書いたのを思い出した

850 名前:デフォルトの名無しさん [2015/10/07(水) 11:20:45.74 ID:Qd1lXfpw.net]
そういった成功体験は捨てたほうがいい

851 名前:836 mailto:sage [2015/10/07(水) 11:50:30.95 ID:0iwSPjqO.net]
「Rubyのしくみ」という本に書いてあるのだが、
RubyのHashは、Peter Moore が考案したもの。
C++でも、彼のロジックを使っているのなら、同じかなと思って

mapの要素数が増えていくと、
バケット数を増やして、再編成されるので、
その際、全要素が移動するから、どうしても遅くなる

だから、メモリ的には損だが、
最初から大きめのバケット数を確保しておけばよい

852 名前:デフォルトの名無しさん [2015/10/07(水) 13:03:07.75 ID:gQOBln3k.net]
ん、std::hashって算法まで規定されてたっけ?
17.6.3.4を見る限りそうではなさそうだが

853 名前:デフォルトの名無しさん [2015/10/07(水) 14:19:20.92 ID:4iZc7XH3.net]
struct hoge{};
const hoge h;
をコンパイルすると
error: uninitialized const 'h'
と出ます。何故ですか
constを外すとコンパイルできます。GCC4.4です。

854 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 15:58:16.91 ID:2UUkd3/F.net]
定数は値が書き換えられないわけで
最初の時点で値を代入しなかった場合、「お前なんのために定数宣言したの?」って突っ込まれてる

855 名前:デフォルトの名無しさん [2015/10/07(水) 16:15:42.33 ID:4iZc7XH3.net]
vcではエラーにならないのは何故ですか
どっちが正しいですか



856 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 16:35:55.12 ID:vH7WjwMJ.net]
どっちかというとGCCのほうが余計なお節介?

857 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 16:40:45.70 ID:jyxNZJK8.net]
そうそう、馬鹿が作ったプログラムがちゃんと動かなくてもコンパイラの責任じゃないしね…

858 名前:デフォルトの名無しさん [2015/10/07(水) 16:42:23.02 ID:Qd1lXfpw.net]
ideone.com/Sr2PO1
エラーにならないけれど

859 名前:デフォルトの名無しさん [2015/10/07(水) 17:24:17.24 ID:gQOBln3k.net]
842は警告ではなくエラーなのはなぜかと聞きたいんだろ

860 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 17:42:19.19 ID:tt9P1ak1.net]
どっちが正しいも糞もないのでは

861 名前:デフォルトの名無しさん [2015/10/07(水) 19:09:00.13 ID:qAlHmwsj.net]
gccはいつも糞だから、これもgccが悪いんじゃねーの。

862 名前:デフォルトの名無しさん [2015/10/07(水) 19:11:12.75 ID:Qd1lXfpw.net]
gccではエラーにならないと言っているだろ

863 名前:デフォルトの名無しさん [2015/10/07(水) 20:31:15.75 ID:lwnukUe8.net]
なるから言ってるんですアホなんですか

864 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 21:27:09.31 ID:BAz1ThzD.net]
>>849
少なくともお前が糞なことは確か

865 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 21:40:43.83 ID:3DMfLJBU.net]
標準C++ではエラーになるのが正しい
VC++でエラーにならないなら標準非準拠か独自拡張

クラス型のconstオブジェクトをデフォルト初期化(で定義)するときは
そのクラスにはユーザ定義のデフォルトコンストラクタがなければならない

>>847がエラーにならないのは静的記憶期間のためゼロ初期化されて上記には該当しないから



866 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:01:49.00 ID:JsRvQDZJ.net]
>>854
>ゼロ初期化されて上記には該当しないから

フーン、それはISO/IEC 14882:2014のどこに書いてあるのですか?

867 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:06:57.63 ID:pNycS8F+.net]
パーサー書いたことある人いますか
一応作ったけどすごい難しいというか面倒というか
どういったアルゴリズムがいいのか馬鹿だからわからん

868 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:22:04.98 ID:ftNCaisU.net]
BoostにC++パーサーがあったような

869 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:23:53.25 ID:Kru1mWVv.net]
boost::spiritでおk

870 名前:デフォルトの名無しさん [2015/10/07(水) 23:24:01.37 ID:gQOBln3k.net]
(1)文字単位の検査 →エラー文字を弾く
(2)文字を結合してトークンを作る →エラートークンを弾く、コメントなど延期トークンをまとめる
(3)トークンを結合して再帰的ツリーを作る →構造の欠損を弾く
(0)メタな表記がある場合、そのメタ表記についてまた(1)から逆再帰的に繰り返す
できたツリーを意味解析に渡す

871 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:25:58.96 ID:0v/h/3vS.net]
>>856
オープンソースのパーサー腐るほどあるだろそれいっぱい読め

872 名前:デフォルトの名無しさん [2015/10/08(木) 00:13:00.11 ID:p7bZHcv9.net]
>>856
あります。
・(E)BNF
・HTTP
・Sentence segmentation
等書きました。

873 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 04:32:10.77 ID:FlZYA0H2.net]
>>856
LL(5)位がおすすめ

874 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 06:37:28.57 ID:ETVAEvki.net]
>>862
なんでLL(5)んああんだよ?
5記号先読みするパーサなんて一般的じゃないだろJK、

ていうかLL(1)(再帰下降構文解析の一番簡単なやつ)とかは
素人でも勝手に再発見するがそこで理解が止まってしまうと
数式のパーサで死ぬので(そのまま作ると2項演算子が全部右結合になってしまう
、やpっぱまずわ正規言語のパーサあたりからから作ってみて感触をつかんだるのちに
ボトムアップパーサの理解に進むべし、

875 名前:デフォルトの名無しさん [2015/10/08(木) 11:19:30.61 ID:GTAWjzct.net]
LL(1)はLL(1)文法になるように人工的に作り出した言語にしかほとんどつかえないからな
LL(5)位なら適当にある言語ならほとんど解析できるだろ



876 名前:デフォルトの名無しさん [2015/10/08(木) 12:23:57.11 ID:GTAWjzct.net]
左結合にしたければカッコつければいいだけだし
右結合する演算子なんて普通無いしな

877 名前:デフォルトの名無しさん [2015/10/08(木) 12:25:42.38 ID:PEkcocuS.net]
バックトラックはセキュリティの問題をはらみやすいので避けたほうが良い。

878 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 12:28:11.85 ID:GTAWjzct.net]
また例の再帰関数大嫌い君か

879 名前:デフォルトの名無しさん [2015/10/08(木) 12:33:40.58 ID:PEkcocuS.net]
好き嫌いの問題ではないはず。

安全か安全でないか。

880 名前:デフォルトの名無しさん [2015/10/08(木) 12:39:28.24 ID:GTAWjzct.net]
妊娠と同じですとでも言いたいのか?

881 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 13:46:07.06 ID:XT2XQMd7.net]
template関数をvirtualにはできない制限って今後のC++でも続くんでしょうか?
そもそもこの制限の理由は仮想関数テーブルを作るコストが大変だから、ってやつですよね?
コンパイル時間かかってもいいからやってくれ、ってニーズはないんでしょうか?

882 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 14:03:10.79 ID:jZEKLa+0.net]
具体的にどういう風に仮想関数テーブルを構築したら
template関数のvirtual化が可能なんですか?
分割コンパイルは可能なのですか?
コンパイル単位を守れるのですか?

883 名前:デフォルトの名無しさん [2015/10/08(木) 14:29:05.60 ID:1TGlpU6G.net]
>>871
やってみろよ、まず
struct A
{
template <typename T>
virtual void func(T) { }
};

884 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 14:40:04.09 ID:jZEKLa+0.net]
そんなこと出来っこないだろう、という返しだったのですが・・・

885 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 14:48:15.03 ID:jZEKLa+0.net]
プログラムに必要なソースコードをグローバルな視点ですべて解析してから
コード生成を開始するならテンプレートな仮想関数どころか
もっととんでもない事が可能かも知れんが
C++はcpp単位で分割コンパイルするのがルールだから無理っていう
baseクラスをコンパイルしてvtable作る時には
それにどんな派生クラスがあるか分らないし、分らなくてもコンパイルできるように
なってるのがC++のルールだからね



886 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 15:32:00.85 ID:YWpiDxnr.net]
テンプレートのインスタンスの概念すら知らないってことでしょ?
こんなの初心者レベルの内容じゃん
やってみろよじゃねーよ

887 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 17:33:27.84 ID:G0kXf/E8.net]
むしろ出来ないと主張する根拠を聞きたいものだ

888 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:00:23.72 ID:TDkjtQvD.net]
今の仕組みじゃ出来ないだろ。
普通のvtableより更にものすごく遅い
仕組みでやるなら出来ないことはないだろうが。

889 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:07:23.28 ID:G0kXf/E8.net]
ISO/IEC 14882:2014は別にvtableの実装を要求してないのだが
「今の仕組み」が普遍的なものであるかのように語られても

890 名前:デフォルトの名無しさん [2015/10/08(木) 18:11:00.56 ID:1TGlpU6G.net]
vtable以外の実装の具体例もしくは具体案なしに空想論を語られてもねえ
今んとこ「できるわけない」という立場を取っているが
説得力のある反論〜反証は金払ってでも拝聴したい

891 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:12:29.15 ID:jZEKLa+0.net]
普通に考えて無理だろう
実行時に動的にロードする事も有るし
うまくいくとは思えないね

892 名前:デフォルトの名無しさん [2015/10/08(木) 18:12:44.05 ID:GTAWjzct.net]
出来るからやるんじゃない
出来ないからやるんだよ

893 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:13:11.65 ID:TDkjtQvD.net]
vtableより早い仕組みがあれば
vtableに置き換わるだろうが
vtableでできないなら何らかの
遅い仕組みで実装しなきゃいけない。
その機能を使わない場合に遅くならないようにするためおそらくはvtableとのハイブリッドになる。

少なくとも現状の仕様でできないのだから、できるというならリーズナブルな実装の一つでも提案しろと。

894 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:20:47.25 ID:G0kXf/E8.net]
なんだ
「俺の使ってる糞コンパイラーではできない」
ってとか。そりゃしょーがない

895 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:22:57.97 ID:jZEKLa+0.net]
struct base { template< typename T > virtual void method( T ){} };
struct derived : public base { template< typename T > void method( T ){} };
このとき、
base::method< int >();
base::method< float >();
derived::method< int >();
derived::method< float >();
の関数の実態があったとき、仮想関数に詰め込む順番をあわせる必要が有る
これはリンカで行うしかないが、動的にロードする場合はどうなるんだという問題が出る
また、derived::method<double>() を追加したとして
baseの方に対応する関数がなかった場合はどうするんだという問題が出る
リンカエラーにするのかvtableを拡張するのかどうするのか
動的にロードする時にどうするのか



896 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:33:41.15 ID:TDkjtQvD.net]
凄いな。
それができるc++コンパイラを持っているらしいぞ。

897 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 18:55:11.54 ID:G0kXf/E8.net]
「分割コンパイルするから無理」「テンプレートのインスタンスの考えからして無理」
と言うから理由を聞いてみたのだが
「ボクのvtable実装では無理」とか、話をすり替えるなんて

非仮想関数と非テンプレ仮想関数は追加オーバー無しでテンプレ仮想関数を実現する方法さえ思いつかないらしい

898 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 19:11:16.86 ID:TDkjtQvD.net]
だから追加オーバーヘッドの無い
実装方法や実装したコンパイラを
具体的に出せと。

899 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 19:14:33.28 ID:jZEKLa+0.net]
どちらにしても、C++は一つのcppのコンパイル中は、それしか見えない仕様
コンパイル単位とかいう物がある
だからテンプレート仮想関数のvtalbeの構築はリンカに頑張ってもらうしかないが
動的にリンクする場合はどうするんだという問題が出てくる

900 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 19:20:02.77 ID:e3P/In2F.net]
>>841
されない

901 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 19:28:15.57 ID:idvE5Tw4.net]
>>888
動的じゃなくてもリンカーがインスタンス化されてないtemplate仮装関数を発見しちゃったらtemplateのコードをインスタンス化してコンパイルやり直さなきゃいけないよね
動的リンクするならコンパイラを実行ファイルに組み込まなきゃいけない
JITありのインタプリタみたいなものになる

そんなものを規格に入れるわけがない

902 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 20:03:43.82 ID:YWpiDxnr.net]
>>886
黙ってろゴミ

903 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 20:13:36.43 ID:ETVAEvki.net]
vtable方式は構造体に(メンバ)関数へのポインタを埋め込む方法より
1段ポインタ参照が増えるから不利だが
vtable方式をやめるとdynamic_castの実現で頭を抱えることになると思う

904 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 20:17:35.06 ID:tERbEPZQ.net]
相変わらず雲をつかむような話で喧嘩できるエスパーなスレですね

905 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 20:19:58.94 ID:fbjyyooL.net]
え?お前出来ないの?



906 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 20:43:07.22 ID:YWpiDxnr.net]
そもそも規格で駄目と明言されてる事なのに
自分じゃできないからって、実装方法すら他人を煽るわせびるわ
頭悪いにも程があるだろコイツ

907 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 21:05:21.80 ID:idvE5Tw4.net]
>>895
現時点での規格で駄目だとしてもそれが将来的に実現可能かどうか、妥当かどうかを考えてみるのは興味深い事だと思うよ
ただ、なぜか彼は偉そうで喧嘩腰なのがいただけないけど

908 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 21:07:33.55 ID:p4LiiGTw.net]
婆ちゃんのために天ぷら揚げないで

909 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 22:26:31.48 ID:XT2XQMd7.net]
>>874
>プログラムに必要なソースコードをグローバルな視点ですべて解析してから
>コード生成を開始するならテンプレートな仮想関数どころか
>もっととんでもない事が可能かも知れんが

ですよね
C#の生産性の高さを考えると、C++ももう少しユーザに優しくあってほしいと思うわけです
当方数値科学計算が仕事ですがC++歴は浅いので、戯れ言として聞き流してください

910 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 22:40:21.99 ID:ETVAEvki.net]
>>874
>プログラムに必要なソースコードをグローバルな視点ですべて解析してから
>コード生成を開始するならテンプレートな仮想関数どころか
>もっととんでもない事が可能かも知れんが

あーそれかなり無理
任意のプログラムに対して有限停止問題が解けるというのと多分同義

911 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 00:01:41.40 ID:3NeJM4zm.net]
かなり無理は不可能なのかそうでないのか

912 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 00:08:18.42 ID:GfpzmItO.net]
必要なソースコードをグローバルな視点ですべて解析してからコード生成
と同等のことは他言語でやってること

913 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 00:09:59.28 ID:m6l+7vgz.net]
言葉の意味まで変更してしまえば当然なんでも可能です

914 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 00:21:28.96 ID:IUqyiVrM.net]
>>901
へえ、例えば?
そういう言語があるとしたらそれソースコード以外のライブラリが使えないんだけどそういう言語はインタプリタで実行するものしか知らんなあ
そういう言語は大抵そこを実行するときに他のソースを読み込むし

915 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 00:23:34.66 ID:m6l+7vgz.net]
C#ではジェネリックなメソッドをオーバーライド出切るんだけど、
C#のジェネリックとC++のテンプレートは仕組みが違うからなぁ



916 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 00:26:43.46 ID:m6l+7vgz.net]
C#はそこそこ頑張っているんじゃないのかねぇ
ヘッダファイルは無いし、複数のファイル間で相互参照があっても
うまいことコンパイルしてくれるって聞いたこと有るぞ

917 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 06:57:51.96 ID:VT/0EZUp.net]
>>899
> 任意のプログラムに対して有限停止問題が解けるというのと多分同義

全然違うと思う

918 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 09:59:13.28 ID:4cEJzv4C.net]
>>904
抽象でしかできないぞ

919 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 13:36:37.06 ID:IUqyiVrM.net]
>>904
ググっても

エラー出るよ助けてよー
出来ないから別の方法使え

しか見つからなかったけど本当に出来るの?

920 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 18:02:05.60 ID:m6l+7vgz.net]
「ジェネリック メソッド オーバーライド C#」
でググって一番上にあるのに何を検索したんだかww
あまりにも検索能力が低すぎて日常にも支障が有るレベルでは

921 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 18:22:33.28 ID:IUqyiVrM.net]
>>909
ttp://qiita.com/monry/items/5a512cfedba665b09135
これのことじゃないよね?

922 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 18:36:34.10 ID:IUqyiVrM.net]
ああ、ここのコメントに書いてあった
オーバーライドしてねえじゃんで読むの止めてしまったわ

923 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 23:04:30.76 ID:9aZeSACJ.net]
いつも常に自分の足を撃たないように地雷原を歩いてる気がする
新機能がオアシスに見えて逃げ水どころか底なし沼だったり、何だこの、これ

924 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 23:53:06.45 ID:UhDsPJDp.net]
もし生まれ変わって再びプログラミングの世界に入るとして、C++選ぶのかな?

925 名前:デフォルトの名無しさん [2015/10/10(土) 00:59:46.33 ID:kmqm1hww.net]
生まれ変われるとしたら(C+=2)-1かな
例外のクソすぎるところをやり直させてくれるベルダンディが降臨したら迷わず帰依する



926 名前:デフォルトの名無しさん [2015/10/10(土) 01:03:34.69 ID:kmqm1hww.net]
頼みもしないスタック巻戻しにくっついてくるRTTIだとか
バカ高いコストのくせに RESUME NEXT がないとか

927 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 01:24:55.29 ID:E0664ZmB.net]
>>914-915
コストって何がどれだけあること言ってんの?実行時間?メモリ使用量?コードサイズ?
最近のコンパイラなら問題になることなんてほとんど無いと思ってるんだけど。

928 名前:デフォルトの名無しさん [2015/10/10(土) 01:33:54.53 ID:kmqm1hww.net]
ほとんど無いと思ってて

929 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 01:46:30.25 ID:E0664ZmB.net]
>>917
答えられないってことは、どうせ迷信や10年前のコンパイラでの話を未だに信じてるだけなんでしょ?

930 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 06:51:03.57 ID:fP3IUTM/.net]
resume nextってなんぞやとググったらVBかよ

931 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 08:05:16.97 ID:CCNhJ4kM.net]
デフォルトのコピーコンストラクタやコピー代入演算子って
コピー時に各

932 名前:メンバに対して(ビットコピーではなく)
コピーコンストラクタやコピー代入演算子を呼び出すことは保証されてる?
ポインタを持たせても、生ポインタではなくshared_ptrを使う限りは
デフォルトのコピーコンストラクタやコピー代入演算子に任せても安全?
[]
[ここ壊れてます]

933 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 08:25:34.33 ID:QRzKPIbr.net]
>コピー時に各メンバに対して(ビットコピーではなく)
>コピーコンストラクタやコピー代入演算子を呼び出すことは保証されてる?
そうか考えたこともなかった
>>920頭いいな

934 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 08:29:34.25 ID:fP3IUTM/.net]
>>920
安全

935 名前:デフォルトの名無しさん [2015/10/10(土) 08:40:12.34 ID:kmqm1hww.net]
>>918
なんの今現在の話だよ
ちょっとやってみりゃすぐわかる馬鹿なこと聞くから相手してやんねーの



936 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 08:50:45.32 ID:fP3IUTM/.net]
>>923
いいからVBつかっとけよ

937 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 14:35:21.78 ID:C2+tlbor.net]
ちょっと調べればすぐ分かるから教えてやらない(震え声)

いい加減に適当に喧嘩をふっかけてそれを買うとすっとぼけるのはやめようよ
まったく意味のないトラブルばかり招くから…

938 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 16:00:00.63 ID:WQItE+Nd.net]
VBと比較してる時点でどうせネットの風評信じて自分の目で
実際の正常系に影響与えてるかどうか検証してないだけだろう
さもなくばただの条件分岐に例外多用してるアレな人か

939 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 16:53:49.17 ID:E0664ZmB.net]
>>923
ちょっとやってみりゃ↓こんな結果(-2.6%~+4.0%)になるだろうってのがわかってるんだよ。
preshing.com/20110807/the-cost-of-enabling-exception-handling/
この結果でも4年前のだしな。

940 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 17:12:47.93 ID:+pTteXD6.net]
resume nextが欲しいと思う時点でやばい

941 名前:デフォルトの名無しさん [2015/10/10(土) 18:29:23.01 ID:DZQ9wvWi.net]
>>925
調べればじゃねえよ、やってみればだ
とぼけてるのはおまえだろ
怠け者め

なんで4年前の記事なんか引っ張んだよ
おまえがやれ、つーかできねえんならこの板ではROMってろ

942 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 19:31:04.17 ID:WQItE+Nd.net]
>>929
やんのはオメーだろ

943 名前:デフォルトの名無しさん [2015/10/10(土) 20:43:07.08 ID:DZQ9wvWi.net]
なすり合いってことにしたいんなら
そうすれば?

おまえが何も得ないだけだし

944 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 20:52:50.43 ID:wZWPBuKi.net]
擦り付け合いとかじゃなく、
お前がやれ
その結果は書き込まなくて良い

945 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 20:53:39.88 ID:WQItE+Nd.net]
馬鹿じゃねーの?押し付けてんのはお前だろ
せめて自分で実際にやってから言えよクズ



946 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 20:54:33.77 ID:RukYXTRG.net]
まあまあ

947 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 21:14:34.91 ID:LXdnro1p.net]
えらそうに言う奴は先ずテメーのソースコードをここに貼ってみろや!

948 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 21:31:15.08 ID:PxJo6CPN.net]
おらおらおらおらー

949 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 21:43:47.39 ID:0dTjLyRb.net]
やめて!
俺のために戦わないで!

950 名前:デフォルトの名無しさん [2015/10/10(土) 23:11:33.18 ID:6QuLtZGt.net]
以上のような状態をセックスと定義します。

男同士でセックスするのはホモです。
従って>>929以降はホモ野郎という事になります。

気持ち悪い。

951 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 23:20:00.07 ID:9fj3wNmr.net]
>>938
その定義だとお前もって事になるけど大丈夫?

952 名前:934 mailto:sage [2015/10/10(土) 23:38:35.56 ID:pverhzbk.net]
まず「以上のような状態」を定義してくれ
なぜ俺はホモ疑いに巻き込まれたんだ

953 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 23:40:41.29 ID:0dTjLyRb.net]
通常の定義と全く異なる俺定義を展開されても
しかも言葉のすり替えでホモに結論づけするとは悪質だな

954 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 01:48:42.13 ID:XDL1o532.net]
homoとhogeって似てるな

955 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 02:35:14.49 ID:cdE875Rm.net]
C++書く人達って無駄に攻撃的な人多いね



956 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 03:49:40.51 ID:Nau1HDji.net]
C++技術者にも色々いるだけだ

957 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 04:00:43.62 ID:PVe4pURO.net]
ID:kmqm1hww
とかVBだしな
C++に限らない

958 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 04:51:42.92 ID:gSJDxW7y.net]
おっと江○添の悪口はそこまでだ

959 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 15:18:32.98 ID:OMjxUQhq.net]
ごちゃごちゃ言ってないでしゃぶれよ

960 名前:デフォルトの名無しさん [2015/10/11(日) 21:07:53.47 ID:WBYIj+O0.net]
VBだっておバンバン
それWindows世代だろw

961 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 06:25:32.18 ID:b39cwc+L.net]
>>942
ソフトウェア商品のグレードなんかの
Home Edition てのも Homo Edition に似てるね。

962 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 12:18:52.11 ID:eT/PtTP3.net]
なんだそのクリックすると喘ぎ声が出そうな製品

963 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 18:00:35.40 ID:ouSN4Vlw.net]
std::coutというか,basic_ostreamのoperator>>についての質問?なんですが,
javaの課題をC++でやってみようとおもって,まだ途中なんですが以下のコードを書きました.
codepad.org/DdMr0gro

これをVS2015環境下でデバッグ実行すると,コマンドライン上に
 [test]
と書かれるはずが
 ] est
つまり,basic_ostreamのイテレータ?が最初に戻ってしまう現象が現れました.
(コマンドライン引数には data/test.txt を指定して,dataフォルダに
「test」と書かれたtest.txtを配置しています.)
おそらくifstreamかgetline()が原因なんだと思いますが,cinとcoutの同期が
原因かなと思ってtieしても解決しませんでした.
なにが原因でこうなってしまうんでしょうか?

964 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 18:16:39.48 ID:KCAkXS7a.net]
ソース読んでないが、テキストファイル側にbom付いてるだけじゃね

965 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 18:20:47.78 ID:aH9tdNzV.net]
ios::binaryで読んでるから\r\nが\nに変換されずに読みこまれてる
coutに\rを入れるとその行の先頭にカーソルが移動する



966 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 18:43:29.57 ID:ouSN4Vlw.net]
なるほど,改行コードのことだとは気付きませんでした.
となると,自分で取り除くか,binaryではなく,ios::inにするとよさそうですね.
ありがとうございました.

967 名前:デフォルトの名無しさん [2015/10/15(木) 20:43:14.49 ID:Z5UOv0gP.net]
ストリームはクソだわ

968 名前:デフォルトの名無しさん [2015/10/15(木) 20:59:33.37 ID:kRNzdeWM.net]
そこでHaskellですよ。

969 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 21:31:42.27 ID:Pl/e/d+4.net]
Javaの課題を写したんなら当然だがc++らしくないな
いっそ元の問題を晒してみたら?
だれかかっこいいc++を書きてくれるかもよ

970 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 22:21:39.39 ID:eGvButUC.net]
>>956
IOは副作用がある (キリッ

971 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 22:39:21.45 ID:4rmzgbky.net]
>>958
そこでモナドですよ(キリッ

972 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 23:43:57.69 ID:KCAkXS7a.net]
っ ::fscanf

973 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 00:21:52.64 ID:yFhNulgB.net]
std::fscanfでなく::fscanfを薦める奴に
ロクな奴はいない

974 名前:デフォルトの名無しさん [2015/10/16(金) 01:22:34.18 ID:MCA6CYcJ.net]
extern "C" int fscanf(FILE*, const char* ...);
namespace std {
using ::fscanf;
}

975 名前:デフォルトの名無しさん mailto:sage [2015/10/17(土) 08:30:18.81 ID:15bBcd+N.net]
可変長引数って
func(const char *s, ...)
func(const char *s ...)
どっちが正しいの?



976 名前:デフォルトの名無しさん [2015/10/17(土) 11:43:59.18 ID:U1ERA7pu.net]
#include <iostream>
using namespace std;
template<typename ...T>
auto f(T...x)

977 名前:{
for(int i:x...)
cout<<i<<endl;
};
int main()
{
f(1,2,3);
return 0;
}

昔こういうことが出来たような気がするんですが
どうやるのか忘れました
教えてください
[]
[ここ壊れてます]

978 名前:デフォルトの名無しさん mailto:sage [2015/10/17(土) 12:19:44.07 ID:e8xa7PiS.net]
>>963
どちらも正しい

979 名前:デフォルトの名無しさん mailto:sage [2015/10/17(土) 12:28:14.71 ID:e8xa7PiS.net]
>>964
for (int i: {x...})
initializer_listを構築してそれをイテレートする

980 名前:デフォルトの名無しさん [2015/10/17(土) 12:50:24.84 ID:U1ERA7pu.net]
ありがとうございます

981 名前:デフォルトの名無しさん [2015/10/20(火) 18:25:41.85 ID:3vGCFixJ.net]
ファイルから指定文字列を検索したい。以下のコードだとsearchが実行時にエラーExpression: istreambuf_iterator is not dereferencable
ifstream f("Text.txt");
string s("is");

istreambuf_iterator<char> eof;
eof == search(
istreambuf_iterator<char>(f.rdbuf()),
//f.rdbuf(),
eof,
s.begin(),
s.end())
);

VS2013です
どうすればいいですか

982 名前:デフォルトの名無しさん mailto:sage [2015/10/20(火) 20:46:00.53 ID:8yDPqMwa.net]
cpprefjp.github.io/reference/iterator/istreambuf_iterator.html
-------引用開始-------
istreambuf_iteratorは、operator++()でイテレータを進めることにより、ストリームバッファのsbumpc()メンバ関数でストリームからデータを読み込む入力イテレータである。
ストリームからのsgetc()メンバ関数による読み取りがTraits::eof()を返した場合に、イテレータはendイテレータと等しくなる。
-------引用終わり-------

って事で、1文字ずつしか読み込まないのでは?

983 名前:デフォルトの名無しさん [2015/10/20(火) 21:44:27.08 ID:RWFAio1T.net]
eofに代入してないね
等値比較して結果を捨ててる

984 名前:デフォルトの名無しさん mailto:sage [2015/10/20(火) 21:51:20.77 ID:wM4Y4a1V.net]
>>968
案1
ファイルの内容を全部stringに読み込んでfindする

案2
ファイルの内容を全部stringに読み込んでregexする

案3
外部コマンドとしてgrepとかawkとかsedをインストールしておいてc++から起動する


お好きな方法でどうぞ

985 名前:デフォルトの名無しさん mailto:sage [2015/10/20(火) 22:01:04.78 ID:82Xf4s6u.net]
std::searchはForward Iteratorを要求するから
Input Iteratorのistreambuf_iteratorを渡してもだめだわさ

std::findならInput Iteratorでいいから一文字目だけをfindで見つけて
二文字目以降は別にチェックするとか



986 名前:968 [2015/10/20(火) 23:37:01.59 ID:3vGCFixJ.net]
ありがとう
試行錯誤してみるよ

987 名前:デフォルトの名無しさん mailto:sage [2015/10/20(火) 23:46:27.98 ID:Kav8lZYy.net]
>>973
一番簡単なのはstd::stringクラスのfindで
一番応用が利くのはstd::regex系を使いこなすこと
だと思うな

988 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 00:48:57.67 ID:k2x/6pgE.net]
#include <iostream>
#include <fstream>
#include <iterator>
#include <cstdlib>

int main(int argc, char** argv) {

std::ifstream ifs("src/main.cpp");
std::istream_iterator<char> is(ifs);
std::istreambuf_iterator<char> ibf(i
fs);
std::istreambuf_iterator<char> ibf_e
of;

std::string istr(ibf,ibf_eof);
std::cout << istr.find("std");

return EXIT_SUCCESS;
}

989 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 01:47:07.42 ID:k2x/6pgE.net]
あ、すまん。std::istream_iterator<char> is(ifs); この行不要な
それとcoutの最後にはstd::endlつけてやってくれ

990 名前:デフォルトの名無しさん [2015/10/22(木) 13:25:09.22 ID:3HJoxiXv.net]
ベクトルのコピーで検索すると
ベクトル同士をコピー代入演算子でコピーするのが一番簡単なきがするのですが
違うやり方ばかり出てくるのはなぜですか?
これがまちがっているということですか?

991 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 13:34:38.59 ID:TivbSMZT.net]
まちがってないで

992 名前:デフォルトの名無しさん [2015/10/22(木) 13:47:47.59 ID:3HJoxiXv.net]
ありがとうございます

993 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 13:55:49.77 ID:CPFSlH5N.net]
違うやり方ってのはstd::vector::assignでbeginからendまでコピーとか?
それのメリットはvector以外の型からもコピーできることかね

994 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 15:52:01.07 ID:wxGQnodN.net]
>>977
単純なコピーの需要が少ないのでは?
単純コピーなら参照でも十分だし

コピーするのは何かを変更したいからワザワザコピーしてを作るわけで
変更するならコピーするタイミングでやるのが簡単だからとか??

あと、要素に参照とかポインタが含まれている場合
シャローコピーになっちゃうわけで参照先の管理が面倒くさくなっちゃう
ディープコピー作るなら一工夫必要だしね

995 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 16:46:09.18 ID:UnQTPRBv.net]
vectorの便乗質問ですが、reserveされてしまった余分な容量を削除する方法としてswap技法
std::vector<T>(x).swap(x)
がありますが、これは一時オブジェクトは全く作成されないのですか?
無名オブジェクトとはいえコンストラクタを呼んでいるわけですから、作成されてるような気がするのですが



996 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 17:44:22.04 ID:TivbSMZT.net]
されてるよ

997 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:39:56.40 ID:UnQTPRBv.net]
>>983
ありがとうございます。やはり作成されるのですね

vectorの容量をシュリンクする効率的な方法としてswap技法を紹介してる人を目にしますが、
コードはシンプルになるものの処理効率が上がるわけではないですよね

998 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:43:29.83 ID:TivbSMZT.net]
>>984
swap技法以外に、方法なくない?

999 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:49:05.63 ID:+o7cqPdB.net]
>>981 は質問の意図をまったく把握してないから無視していいと思う

>>984
複雑で効率的な方法示してみなよ。無いから。

1000 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:53:09.88 ID:UZ6K9ouN.net]
自作のベクタークラスを作る
サイズを縮小する場合はreallocを使う

1001 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:56:31.41 ID:IiO/at8e.net]
shrink_to_fit()

1002 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:59:03.48 ID:E1Ocrnf5.net]
最初から必要なサイズを確保すればいい。

1003 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 20:19:27.23 ID:gQOdFLsP.net]
春よこい

1004 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 21:33:39.08 ID:OXupIzBk.net]
次スレ

C++相談室 part120
peace.2ch.net/test/read.cgi/tech/1445516998/

1005 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 21:55:12.08 ID:kinLxVE3.net]
>>989
必要なサイズがわかってるなら単なる配列でよくね?



1006 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 22:15:13.77 ID:TKCRaEBU.net]
>>992
だったら君は配列だけ使ってれば?

1007 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 22:43:30.77 ID:kinLxVE3.net]
>>993
必要なサイズがわかってるなら、そうしてますが何か?

1008 名前:デフォルトの名無しさん [2015/10/22(木) 23:19:22.19 ID:OwqJeF9X.net]
必要なサイズがわかっててもvectorなドアホがいたw

1009 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 23:21:34.94 ID:plnHfgiP.net]
ポインタでも参照でもない変数って
仮想関数呼んでも呼ばれる関数が静的に決まるよね
このときもvtable経由で呼ばれる?(仮想関数の呼び出しオーバーヘッドがある?)
それともオーバーヘッド0で呼ばれる?
それとも未定義? 最適化次第?

1010 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 23:21:45.47 ID:4GjtJ8Lk.net]
「わかる」タイミングの問題だ

1011 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 23:22:03.08 ID:l1df8Qjo.net]
vectorって配列に比べてそんなにオーバーヘッドあるか?

1012 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 23:24:06.05 ID:Y4jcRaLX.net]
スタック容量を減らすならarray < vector

1013 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 23:33:55.59 ID:rvBOfPQs.net]
>>995
それをドアホというお前さんこそドアホである可能性

1014 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

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








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

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

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