[過去ログ] C++相談室 part132 (941レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1(1): 転載ダメ (ワッチョイ faeb-wbjw) 2017/10/10(火)00:11 ID:nc/5PI4P0(1/2) AAS
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part131
2chスレ:tech
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.101【環境依存OK】
省7
842(1): (ワッチョイ a19f-RjUU) 2017/11/19(日)18:31 ID:SsMAbqSz0(18/22) AAS
>>841
嘘つけ。キャストした場合についてはどこにも書いてない。
型が普遍なんてのは、君が勝手に思い込んでいるだけだ。
というか、いわゆる「強い型」ってのはそうらしいが、C++はそうじゃないだろ。
ちなみに俺も反論を用意してたところだ。
外部リンク:godbolt.org
中身は795の場所で、ついでだから f = *(double*)&i; を試した。
予想通りこちらはfmov(movsd)が出た。(最適化は切ってある)
つまり、俺が768で言ったように、
*(long long*)&f = i; // mov命令でコピー
省4
843: (オッペケ Srd1-0Zlk) 2017/11/19(日)18:51 ID:Q6cWJ/Rgr(2/3) AAS
>キャストした場合についてはどこにも書いてない
はて、N4700の6.10/p8ほぼそのままの文面が少し上に貼り付けてあったような…
>>821
N4700 3.9, 4.5/p1, 6.8全般, 6.10/p8, 12.3/p1, 12.3/p(5.3), その他「launder」が登場する記述全般
844(1): (ワッチョイ 02bd-VFQ0) 2017/11/19(日)18:52 ID:p3uF8GIb0(11/11) AAS
正しいそうなコードが吐かれたことは未定義動作でないという証拠には全くならない
なぜなら未定義動作というのは
コンパイル時のエラー、実行時のエラー(または例外)、一見正常っぽく気体通り動く、その他、
というあらゆる事象を包含し得るので、、、
もちろんコンパイラの変更で(ことによったらコンパイル条件の変更だけでも)
ある日突然狂ったコードが吐かれる危険性があるが
そうなっても未定義動作をプログラムした人の責任
よって現時点で正しいげなコードが吐かれることをいかに力説しても無駄で、
規格の矛盾の指摘にはつながらない
845(1): (ワッチョイ 0233-dUYE) 2017/11/19(日)18:53 ID:xhmNfS4m0(14/17) AAS
>>842
オブジェクトの型に関与しない操作についていちいち記述があるわけないだろ。
まさか「〜によりオブジェクトの方は変わらない」とかの記述が全演算子&標準関数その他諸々について必要だ
なんて言うわけじゃないよね?
未定義動作の結果はなんでもアリだと言っただろう。
その結果(想定の命令コードが生成されたこと)が未定義動作の結果のひとつだとして、何の矛盾も無い。
846: 片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ f9b3-HT85) 2017/11/19(日)19:03 ID:R56+Z6E80(1) AAS
inline const self_type *const_this()
{
return this;
}
template <typename T_TYPE>
inline T_TYPE *drop_const(const T_TYPE *obj)
{
return const_cast<T_TYPE *>(obj);
}
847: (ワッチョイ f9b3-AWKa) 2017/11/19(日)19:04 ID:RgqRbH7C0(1/3) AAS
ソースが仕様、ソース読めってやつか。
848: (ワッチョイ 82ae-Eq1o) 2017/11/19(日)19:25 ID:7jEiMXMd0(3/4) AAS
そう言って居直るやつは問題だが
ソースを読まない言い訳にするやつもダメ
腐敗は両岸から起きうることだ
849(2): (ワッチョイ a19f-RjUU) 2017/11/19(日)19:53 ID:SsMAbqSz0(19/22) AAS
>>844-845
うむ。それは一理ある。
>>845
では逆から行こう。reiniterpret_castのど頭、
> 5.2.10 Reinterpret cast
> 1. The result of the expression reinterpret_cast<T>(v) is the result of converting the expression v to type T.
vをTに型変換したのが結果だとそのまま書いてある。
これはどう解釈すれば、「型はどうやっても変更できない」と取れるのだ?
さすがに無理だろ。
> 7. An object pointer can be explicitly converted to an object pointer of a different type.
省7
850: (ワッチョイ 82ae-Eq1o) 2017/11/19(日)20:02 ID:7jEiMXMd0(4/4) AAS
>>849
If T is an lvalue reference typeという但し書きがついているよな
(double&)ならlvalueだが(double)は違う
851(2): (ワッチョイ 0233-dUYE) 2017/11/19(日)20:09 ID:xhmNfS4m0(15/17) AAS
>>849
> これはどう解釈すれば、「型はどうやっても変更できない」と取れるのだ?
式の型 (static type) は変わるが、オブジェクトの型 (dynamic type) は変わらない。
> 君が言うようにメモリ上の型が普遍なら、どうやっても i には fmov が出ては駄目だろ。
未定義動作ならなんでもアリだと言った。
852(1): (ワッチョイ a19f-RjUU) 2017/11/19(日)20:15 ID:SsMAbqSz0(20/22) AAS
>>851
それで突っぱねるのなら平行線だね。
俺は仕様書に詳しいわけでは無いから動作から説明するしかない。
君は仕様書には詳しいようだが、キャストした場合にも型が変更されないという記述を出して来れない。
ま、デッドロックだ。
とはいえ状況は色々分かったよ。ありがとう。
853: (オッペケ Srd1-0Zlk) 2017/11/19(日)20:42 ID:Q6cWJ/Rgr(3/3) AAS
>つまり当然有効なlvalueであり、デリファレンスも可能だ。
仕様を引用して説明されてもこのとんちんかんな発言を繰り返すあたり、
知らないから間違えているのではなくオツムが悪いので必然的に無知になったと言うことに>>851は気付くべき
854(1): (ワッチョイ 0233-dUYE) 2017/11/19(日)20:47 ID:xhmNfS4m0(16/17) AAS
>>852
> 俺は仕様書に詳しいわけでは無いから動作から説明するしかない。
なら↓お前の理解に基づいてこの動作を説明できるか試してみるといいかもしれない。
外部リンク:wandbox.org
> 君は仕様書には詳しいようだが、キャストした場合にも型が変更されないという記述を出して来れない。
式の型 (static type) とオブジェクトの型 (dynamic type) は別物だという客観的な
前提 [intro.defs] を素直に読みさえすれば何度も見えてるはずなんだけどな。
855: (ワッチョイ c6e7-RjUU) 2017/11/19(日)20:54 ID:XAwzlQ9S0(6/7) AAS
こいつわかってて引っ掻き回してるだけのような気がするわ
そうじゃなかったら馬鹿すぎる
856: (ワッチョイ 02e7-GXP8) 2017/11/19(日)21:10 ID:JvH46D6m0(1) AAS
ある型の変数を入力として、別の型にキャストされた値を返すのはそりゃできるだろう
元の変数の型を変えることはそりゃ無理だろう
857(1): (ワッチョイ a19f-RjUU) 2017/11/19(日)21:20 ID:SsMAbqSz0(21/22) AAS
>>854
それは何も不思議じゃ無いと思うが。
例の最適化もされてるし。
どこが俺の理解と矛盾してるつもりなんだ?
858(1): (ワッチョイ 0233-dUYE) 2017/11/19(日)21:40 ID:xhmNfS4m0(17/17) AAS
>>857
お前の中でどういう理解になっているかは把握できていない。
その答えからすると、
"*(long long*)&f = i;" なら未定義動作にならないけど "auto p = (long long*)&f; *p = i;" なら未定義動作になる、
という理解なのかな。まぁそんなことは無いんだけどさ。
859: (ワッチョイ f9b3-AWKa) 2017/11/19(日)22:14 ID:RgqRbH7C0(2/3) AAS
いやまあ無いんだけどな。
いつまで言い張る気なんだろうか。
860: (ワッチョイ f9b3-AWKa) 2017/11/19(日)22:16 ID:RgqRbH7C0(3/3) AAS
あると言えばあるんだけどな。
そろそろごめんなさいしてはどうか。
861: (ワッチョイ 6e81-LokX) 2017/11/19(日)22:24 ID:kv2+5Ve80(1) AAS
本の虫での解説記事が待たれる
862: (ワッチョイ a980-61Vg) 2017/11/19(日)23:33 ID:qbUCqX2r0(1) AAS
strict aliasing ruleについてはここで解りやすく解説されてる。自分で怪しいと思う奴は読め。
外部リンク:d.hatena.ne.jp
863(2): (ワッチョイ a19f-RjUU) 2017/11/19(日)23:37 ID:SsMAbqSz0(22/22) AAS
>>858
ああそうだぞ。それは>>815で既に言ったし、実際に発現事例は今のところ全てaliasされてる。
顕在化させるには、「別型」で「alias」しないといけないんだよ。
オプションの名前も全くそうだろ。
多分君は理屈が分かってないんだ。
あれはtypeグループごとにメモリフェンスしていて、
別typeグループに入っていると結果的にout-of-orderになるだけなんだよ。
それは常時動いている。
ただし different type で alias して無いと顕現しない(ユーザ側には見えない)というだけ。
だからその可能性がある部分にwarningが出る。
省18
864: (ワッチョイ c6e7-RjUU) 2017/11/19(日)23:50 ID:XAwzlQ9S0(7/7) AAS
ダメだこりゃ
865: (ワッチョイ 8d8a-Dzd0) [sage釣] 2017/11/20(月)00:03 ID:y/6cZRj30(1) AAS
そろそろ専用スレを建てて欲しいな
866: (ワッチョイ f9b3-AWKa) 2017/11/20(月)00:06 ID:Veq8ZMOx0(1/3) AAS
最初に質問した奴が謝罪すれば治まるのでは。
867: (ワッチョイ 02bd-VFQ0) 2017/11/20(月)00:12 ID:gqHMI2DN0(1/3) AAS
最適化は人類には早すぎた
早すぎたテクノロジー
868(4): ◆QZaw55cn4c (ワッチョイ e260-v9tW) 2017/11/20(月)00:14 ID:Y8ntE/6M0(1/10) AAS
いきなりレベルの低い話で割り込んで恐縮です。
よろしくお願いいたします。
久々にJava から C++ に移行して、簡単なイテレータパターンを実装しました。
Java で書いた
外部リンク:ideone.com
を元に C++ で書いてみたのがこれです。
外部リンク:ideone.com
ここで、コンテナにあたる Aggregateクラス(具象クラスは BookShelf) の中に
イテレータ(Iterator:具象クラスは BookShelfIterator) を作成して返すメンバ関数 iterator() を定義していますが、
C++ だからデストラクタも定義しないとね、と考えて
省12
869(2): (ワッチョイ 0233-dUYE) 2017/11/20(月)00:34 ID:uuALJ8Da0(1/3) AAS
>>863
> 上記を覆したければ、alias無しで different type alias の最適化がかかっている例を持って来い。
これでいいかな。
外部リンク:wandbox.org
870(1): (ワッチョイ 0233-dUYE) 2017/11/20(月)00:41 ID:uuALJ8Da0(2/3) AAS
>>863
ごめんまちがえた。 >869 じゃわかんないね。
外部リンク:wandbox.org
871: (ワッチョイ a19f-RjUU) 2017/11/20(月)00:53 ID:H8zFncfx0(1/3) AAS
>>869
せこいわw
gcc7.2.0(そこの最新版)で%eにしたら見えるがな。
まあ努力はご苦労様。
とはいえ、gcc4.4.7ならこのコードでも顕在化するし、「aliasが要る」という要件が怪しいのは認める。
この最適化はまだ発展途上のようだね。
872(1): (ワッチョイ a19f-RjUU) 2017/11/20(月)01:07 ID:H8zFncfx0(2/3) AAS
>>870
おっとすまん、輻輳してしまったが、869で問題なく分かったぞ。
そして両方とも、gcc7.2.0にするか、globalにすると直る。
したがって、 different type alias で問題が発生するのには 「aliasが要る」という俺の見解は間違いだ。
ただ、過度の最適化による不具合を防ぐ努力は行われており、
gcc4..4.7→gcc7.2.0でこのコードに関しては修正されてる。
とはいえgcc7.2.0でもどこまで動くか分かった物ではないね。
873(1): (ワッチョイ 0233-dUYE) 2017/11/20(月)01:11 ID:uuALJ8Da0(3/3) AAS
>>872 さぁ、お前の罪を数えろ。
874: (ワッチョイ f9b3-AWKa) 2017/11/20(月)01:32 ID:Veq8ZMOx0(2/3) AAS
何で素直に謝罪できないんだろうね。
875(2): はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE) 2017/11/20(月)01:42 ID:mEO8F9pQ0(1/12) AAS
>>868
それが virtual の効果だとしか。
基底で virtual 宣言したメンバ関数群はそのポインタをまとめたテーブルが作られ、オブジェクトはそのテーブルを指すポインタを持つ。
派生のオブジェクトは派生側の関数群を指すポインタテーブルへのポインタを持つ。
だから virtual を使うと「変数の型ではなくオブジェクトが呼出すべきメンバ関数を知っている」という状況を作れるんだよ。
ただ、基底のデストラクタを virtual に指定しないときでも見かけ上は型システムをパスしてしまいコンパイルエラーにならない場合がある。
これは未定義だからやっちゃダメだよ。
876(1): はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE) 2017/11/20(月)01:59 ID:mEO8F9pQ0(2/12) AAS
>>868,875
Wikipedia にも解説があるやないけ
外部リンク:ja.wikipedia.org
877(1): ◆QZaw55cn4c (ワッチョイ e260-v9tW) 2017/11/20(月)02:35 ID:Y8ntE/6M0(2/10) AAS
>>875-876
うーん、普通のポリモフィズムの話が同様に適用できるんですね…
Base<-Derived1
Base<-Derived2
の基底・派生関係のとき
Base *p = new Derived1() ならば、delete p; は delete (Derived1 *)p;
Base *p = new Derived2() ならば、delete p; は delete (Derived2 *)p;
となる、と考えていいでしょうか。
Base *p = new Derived1() ならば、p->method(); は p->method_Dirived1();
Base *p = new Derived2() ならば、p->method(); は p->method_Dirived2();
省3
878(2): ◆QZaw55cn4c (ワッチョイ e260-v9tW) 2017/11/20(月)02:59 ID:Y8ntE/6M0(3/10) AAS
次に >>868 のテンプレート版を書いてみました。
外部リンク:ideone.com
void * (Java の Object)をキャストするのを嫌ったという理由になります。
>>868
>class Iterator
>virtual void *next() = 0;
>class BookShelfIterator : public Iterator { };
>void *BookShelfIterator::next()
>Book *book = (Book *)it->next();
外部リンク:ideone.com
省8
879(1): はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE) 2017/11/20(月)03:03 ID:mEO8F9pQ0(3/12) AAS
>>877
キャストとは意味が違うんだよ。
上でさんざん議論してる static type と dynamic type の話とも関係あるのかなぁ?
入り組んでてよくわからん。
型はあくまでも Base* で、仮想関数テーブルを辿って必要な関数を呼び出すってだけだ。
繰返すけど、 Base のデストラクタに virtual がついてないときに Base のポインタに対して delete すると
Base のデストラクタが呼び出されるだけになってまうので気をつけてな。
派生クラスのデストラクタが空っぽのときでもデストラクタが呼び出される必要はあるらしいぞ。
880(3): ◆QZaw55cn4c (ワッチョイ e260-v9tW) 2017/11/20(月)03:12 ID:Y8ntE/6M0(4/10) AAS
>>878 の続きです。
同じく、テンプレート版
外部リンク:ideone.com
にて一点不満におもったことがあります。
>>878 では基底クラスの記述について、
template <typename T>
class Iterator {
public:
virtual T *next() = 0;
};
省17
881(1): はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE) 2017/11/20(月)03:15 ID:mEO8F9pQ0(4/12) AAS
>>878
付けなくてもいいし、付けても通るってのは私は今初めて知った。
882: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE) 2017/11/20(月)03:23 ID:mEO8F9pQ0(5/12) AAS
>>880
強引なキャストで出来る可能性はあるかもしれないけど、
常識的な方法では出来ないと思う。
ただ、そもそもそういう継承関係を作る必要は無いんじゃないか。
883(1): ◆QZaw55cn4c (ワッチョイ e260-v9tW) 2017/11/20(月)03:26 ID:Y8ntE/6M0(5/10) AAS
>>879
ありがとうございます。
meyers の effective C++ 第7章を読み返しています
C++ には Java の fainal がないので、うっかり、std::string や std::vector を派生させてしまうところでした、危ないなあ…
884(1): (ワッチョイ 869f-GXP8) 2017/11/20(月)03:30 ID:iECo0Ul80(1) AAS
>>868
混乱するならシンプルに設計したら?例えばこんな感じ?登録して表示するだけなら簡単でしょ?
#include <stdio.h>
#include <string>
#include <vector>
class Book{
public:
std::string name;
Book(std::string _name) : name(_name){}
void show(){printf("%s\n",name.c_str());}
省17
885(2): はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE) 2017/11/20(月)03:34 ID:mEO8F9pQ0(6/12) AAS
>>880
Java のことはあまり知らんので元ネタにした Java 版の方をよく見てなったけど、
interface のかわりに抽象クラスを使おうとしてたのか。
似たような機能に見えちゃうかもしれないけど、インターフェイスを強制する方法としては抽象クラスはあまり良くない。
C++ 的にはコンパイル時にディスパッチする多相と実行時の多相があって、
抽象クラスは実行時にディスパッチする仕組みなのでコンパイル時に確定するはずのことを実行時にするのはクソザコという風潮。
だけど「コンセプト」の機能が C++ に導入されるのが延び延びになってていまだ入ってないので、
traits とか SFINAE とかを使ったまわりくどいメタプログラミングで代用してるのが実情なんだ。
886(2): ◆QZaw55cn4c (ワッチョイ e260-v9tW) 2017/11/20(月)03:45 ID:Y8ntE/6M0(6/10) AAS
>>881
>付けなくてもいいし
うーん、デストラクタの場合はテンプレート引数をつけないとおこられちゃいます…
×外部リンク:ideone.com 69行目
○外部リンク:ideone.com 69行目
よくわらからないな…
887(3): はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE) 2017/11/20(月)03:53 ID:mEO8F9pQ0(7/12) AAS
>>886
いや、型名の方には付ける必要あるよ
×:
template <typename T> TShelf::~TShelf() { delete [] (this->t_s); }
〇:
template <typename T> TShelf<T>::~TShelf() { delete [] (this->t_s); }
△: 知らんかった
template <typename T> TShelf<T>::~TShelf<T>() { delete [] (this->t_s); }
888: ◆QZaw55cn4c (ワッチョイ e260-v9tW) 2017/11/20(月)03:57 ID:Y8ntE/6M0(7/10) AAS
>>884
はい、すごくよくわかります!!
std::vector とか、std::list とかstd::deque とかは、たぶんいけると思います。
2chスレ:tech
2chスレ:tech
なんとなくデザパタ本を読み返していて、車輪の再発明に没頭してしまいましたが、C# のデザパタ本、というのも聞かないし、もうデザパタは古いのかな…
889: (ワッチョイ 42b3-VAF2) 2017/11/20(月)03:58 ID:O993TKuI0(1/2) AAS
マジか
役に立つ日が来るかどうかはシランケド
890: ◆QZaw55cn4c (ワッチョイ e260-v9tW) 2017/11/20(月)03:59 ID:Y8ntE/6M0(8/10) AAS
>>887
ありがとうございます。確認いたしました。
891: (ワッチョイ 42b3-VAF2) 2017/11/20(月)03:59 ID:O993TKuI0(2/2) AAS
↑ >>887
892(1): ◆QZaw55cn4c (ワッチョイ e260-v9tW) 2017/11/20(月)04:12 ID:Y8ntE/6M0(9/10) AAS
>>885
夜遅くにコメントいただきありがとうございます。
>C++ 的にはコンパイル時にディスパッチする多相と実行時の多相があって、
理解できます。コンパイル時に確定できるのなら最大限それに努める思想はたとえば constexpr にも現れていると思いました。
>抽象クラスは実行時にディスパッチする仕組みなのでコンパイル時に確定するはずのことを実行時にするのはクソザコという風潮。
うーん、たぶん私が周回遅れなだけだと思いますが、じゃあ、ひところ、あれほどまでにもてはやされたデザインパターンは、どこにいってしまったのでしょう…もう誰もやらないのかな…
893: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE) 2017/11/20(月)04:13 ID:mEO8F9pQ0(8/12) AAS
>>887
なんでこうなってるかっていうのは割と感覚的にやっちゃってるからうまいこと説明できひんのやけど。
クラステンプレートの中に関数テンプレートも書けたりするので
template<class T>
class foo {
public:
template<class U> void bar(void);
};
実装書くときはどれがどれに掛かってるかわかるようにせんといかん
template<class T> template<class U>
省3
894(1): はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE) 2017/11/20(月)04:30 ID:mEO8F9pQ0(9/12) AAS
>>892
抽象クラスを使うパターンなんてのがあるわけ? GoF 本とか読んだことないから知らんけど。
それはインターフェイスをまとめた何かを作れって話とかじゃないの?
C++ の抽象クラスを使えって話とは違ったりしそうだけど。
デザインパターンはあくまでデザインの話なんだから言語の具体的な機能はその時代に有るものでやるしかないし、
よりよい機能が提供されるようになったら使うだろ、そりゃ。
抽象クラスを使うやり方しかできないなら「デザイン」を学び取れてないってこった。
まあ今は C++ への理解も十分でないからってのもあるだろうけどさ。
ところで QZ って C++ スレの常連みたいに思ってたけど、
その割にアレなのでひょっとして共通トリップだったりするの?
895: ◆QZaw55cn4c (ワッチョイ e260-v9tW) 2017/11/20(月)04:42 ID:Y8ntE/6M0(10/10) AAS
>>894
>その割にアレなのでひょっとして共通トリップだったりするの?
単に、あれよあれよと、また、次から次へと忘れていくので、ぜんぜん進歩しないだけなのでした。
こんな感じ… 動画リンク[YouTube]
896: (ワッチョイ 228d-zvir) 2017/11/20(月)07:05 ID:8Dez9ldp0(1) AAS
手元に古いGoF日本語訳(1999年初版)があったので覗いてみたら、
Iteratorのサンプル(C++)が>>880みたいに抽象クラスで実装されていてびっくりした。
抽象クラスを使わなくても、処理の共通化を考えないなら問題ないし、
共通化したい場合でも、そこだけテンプレート化すればよいような気がする。
外部リンク:ideone.com
897(1): (ワッチョイ 4178-kX9V) 2017/11/20(月)08:00 ID:GfOPAtNP0(1) AAS
VC++とか今でこそまともだけど昔はテンプレート周りがうんこすぎて風呂釜洗剤教の人のやり方に頼らざるを得なかったらしいね
898: (ワッチョイ 826e-Eq1o) 2017/11/20(月)09:24 ID:9q5rB25R0(1) AAS
そういう「まとも」を求めてVCを選ぶのは情弱のすることだ
意味の違う「まとも」で定評のあるコンパイラであって
899: (ワッチョイ f9b3-AWKa) 2017/11/20(月)09:46 ID:Veq8ZMOx0(3/3) AAS
Vistaまではgccでコンパイルしてたらしいからな。
900: (アウーイモ MM05-0x9U) 2017/11/20(月)10:17 ID:5dn4op1oM(1) AAS
初心者なんですがusing使い方を教えて下せえ
901: (ワッチョイ 0234-1gB9) 2017/11/20(月)10:36 ID:Fx3rJ6pW0(1/2) AAS
usingは時代によって使える機能が異なる
昔はnamespaceから使える宣言を取り出す役割
最近は=を用いてtypedefの簡略化っぽい書き方が出来る
902: (ワッチョイ 0234-1gB9) 2017/11/20(月)10:42 ID:Fx3rJ6pW0(2/2) AAS
将来的にはusingがプロパティの役割まで担ってくれると余計な予約後増やさなくて済む希ガス
903: (ワンミングク MM52-Dzd0) [sage釣] 2017/11/20(月)12:17 ID:OatlO4rKM(1) AAS
>>897
最初なんてタダのマクロだったし、
4.xだってテンプレート使うと名称長さ制限にかかったり
STLのBUGは何時までたってもそのままだし
904: (ワッチョイ ae6e-Eq1o) 2017/11/20(月)14:57 ID:ZHV8ZCmh0(1/2) AAS
ratioのバグとかinitializer_listとかね
しっかりしているようで時おり大ボケで笑いを取る謎な会社だ
905: (ササクッテロラ Spd1-CMbJ) 2017/11/20(月)16:59 ID:CB3KD7K4p(1) AAS
>>883
重箱の隅だけどC++にもfinal導入されたよ、C++11からだっけ
stlに付いてるかどうかは覚えてないけどw
906: (ワッチョイ ae6e-Eq1o) 2017/11/20(月)17:06 ID:ZHV8ZCmh0(2/2) AAS
重箱の隅じゃあんめえ
仮想デストラクタがないことと継承禁止は近いが違う
907: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE) 2017/11/20(月)17:20 ID:mEO8F9pQ0(10/12) AAS
std::vector とかを public 継承してもスライシングが起こらないように使う分には全然問題ないわけだしな。
でも人間はアホだからスライシングするし、スライシングしたときにコンパイルエラーにしてくれないから避けようっていう「習慣」なだけで、
言語機能としてはデストラクタが仮想になってないからといって継承が禁止されているってわけではないんだ。
そこらへんは確かに意味づけが違う。
908(1): (ワッチョイ 02cf-Gm5t) 2017/11/20(月)17:54 ID:4sV97R+K0(1) AAS
デザパタは基本的にGC言語向きだしな
C++とは相性が良くない
909: (スプッッ Sd41-LOf1) 2017/11/20(月)19:05 ID:RcaXyFV8d(1) AAS
C++の基本的なコーディングを学ぶのにオススメな書籍あるかな?
テクニック集とかもあると読んでみたいと思っている
910: (ワッチョイ a17f-8CrJ) 2017/11/20(月)19:11 ID:q0WTO8Pn0(1) AAS
EffectiveC++シリーズ
Exceptional C++
C++ Coding Standards
あたりの定番中の定番でいいだろ
911(2): (ワッチョイ 41eb-RjUU) 2017/11/20(月)20:12 ID:rJCmscgl0(1) AAS
ここって本職でやってる人らばっかりなんかね
日曜プログラマが気安く書き込んでもいいのだろうか
912: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE) 2017/11/20(月)20:21 ID:mEO8F9pQ0(11/12) AAS
>>911
いいよ。 俺も趣味プログラマだけど偉そうに書き込んでるし。
913(1): (ワッチョイ 02bd-VFQ0) 2017/11/20(月)21:53 ID:gqHMI2DN0(2/3) AAS
GoF本のうち
Stateパターンは抽象クラス必須
Abstractなんちゃら系も抽象クラス必須
な印象
914: (ワッチョイ 02e7-GXP8) 2017/11/20(月)22:05 ID:vFwnmuVP0(1/2) AAS
>>911
プロがここでうんちく垂れてたら引くわな
915: (ワッチョイ a19f-RjUU) 2017/11/20(月)22:07 ID:H8zFncfx0(3/3) AAS
>>873
最新版で該当ケースを探せず、
わざわざ5年前の版を持ち出してきてまで俺ツエーしたいヘタレを相手にしてしまい、すいませんでしたー
gcc4.4.7(2012/3/13)の時点で対応できて無いという情報はものすごく役に立ちますー(棒)
つかマジで、賢いつもりなら最新版で該当ケース探してgccに報告しろよ。
問題に遭遇したらとりあえず最新版、というのは基本だ。
ここを問題視する奴がgcc4.4.7なんて今使ってるわけないだろ。お前は馬鹿なのか?
お前のその努力は誰の為にも役に立ってないだろ。
これは多分に政治的問題で、コンパイラ屋がごねているだけだ。
既に言ったとおり、
省16
916: (ブーイモ MMcd-pLBf) 2017/11/20(月)22:13 ID:cvRta7BJM(1) AAS
>>908
GoF本はc++とsmalltalkだったろ
917: (ワッチョイ 02bd-VFQ0) 2017/11/20(月)22:48 ID:gqHMI2DN0(3/3) AAS
テンキー風のボタンの並びでモードによって意味が変わる(Num Lock ON/OFFのもっと複雑化したようなやつ
というユザーインターフェースの実装はStateパターンのどくだんば
そこまでレトロなのでなくてもGUIでお絵かきツールを集めたツールボックスなUIとか作ると
Abstructなんちゃらパターンのどれかを再発明しているケースが多いと思う
918: (ワッチョイ 02e7-GXP8) 2017/11/20(月)23:04 ID:vFwnmuVP0(2/2) AAS
←なぜか変換できない
919: (ワッチョイ 466f-MUuo) 2017/11/20(月)23:35 ID:mEO8F9pQ0(12/12) AAS
独擅場 ← どくせんじょう
920: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE) 2017/11/21(火)00:48 ID:KkY90WH60(1/2) AAS
>>913
昨日 >>885 でまわりくどいメタプログラミングと言ってたのがそれだ。
State パターンのように特定のメンバ関数を持っていることを強制したいときには
それを判定するトレイツを作って対応する。
たとえば >>886 にあるコードを対象に考えて、
「あるクラスがそのクラス自身のポインタを返す next という名前のメンバ関数を持っているか」
を判定するトレイツはこうなる。
template<class T>
class has_next {
template<class U, class V = T>
省12
921: (ワッチョイ 6e81-LokX) 2017/11/21(火)01:13 ID:H+r6aFWv0(1) AAS
そんなくそレガシーなtraits
久々に見た…
922(2): (スップ Sd82-LOf1) 2017/11/21(火)17:31 ID:6BA+Ife8d(1/6) AAS
あるファイルに下のような文字が書き込まれていて
xxxx=3
これの3を取得する完璧無欠なロジックなにかないかな
923(1): (ワッチョイ 4178-kX9V) 2017/11/21(火)17:32 ID:uRVBPn0b0(1/2) AAS
完璧無欠とは?
924: (スップ Sd82-LOf1) 2017/11/21(火)17:36 ID:6BA+Ife8d(2/6) AAS
>>923
俺様のアルゴリズムは完璧だぜ!!!
ってだけ
まあそんなのないんだけど書き込みたかった
925: (アウアウカー Sa49-vUM9) 2017/11/21(火)18:10 ID:B2ib4/wIa(1) AAS
正規表現でよくない?
926(1): (ワッチョイ a104-0wpo) 2017/11/21(火)19:05 ID:DIhAB+/L0(1) AAS
リバースイテレータをfindしてイコールでセパレート。
って、数行から見つけるのか。
構文解析とかか?
927(1): (スップ Sd82-LOf1) 2017/11/21(火)19:38 ID:6BA+Ife8d(3/6) AAS
>>926
数行から見つける
設定値の中から見つける
実際は
#xxxはdddの設定値
xxx=1
#yyyはcccの設定値
yyy=3
こんなのが繰り返し書かれてる
正規表現確かに良さそう忘れてた
928: (ワッチョイ a168-+5lI) 2017/11/21(火)19:53 ID:GhiisSyt0(1/2) AAS
(?<=^xxx=)\d+$
929(1): (ワッチョイ 41eb-RjUU) 2017/11/21(火)20:30 ID:0pu32Yjt0(1/2) AAS
float演算がdoubleよりも遅いってアジですか?
930: ◆QZaw55cn4c (ワッチョイ e260-v9tW) 2017/11/21(火)21:02 ID:xJ15vzkZ0(1) AAS
>>929
何が計算するかによる、としか
931: (ワッチョイ 41eb-RjUU) 2017/11/21(火)21:12 ID:0pu32Yjt0(2/2) AAS
さいですか
932(1): (オッペケ Srd1-0Zlk) 2017/11/21(火)21:19 ID:muR8Mwv6r(1) AAS
>>922
ほれ
外部リンク:wandbox.org
933: (スップ Sd82-LOf1) 2017/11/21(火)21:44 ID:6BA+Ife8d(4/6) AAS
>>932
すんごく綺麗なコードありがとう
見事に魔改造して糞コードにしてしまう自信がある
934(1): (ワッチョイ a980-61Vg) 2017/11/21(火)21:55 ID:6jcLJvUW0(1) AAS
>>927
そういう設定ファイル的なものを読むならkeyとvalueのペアのリストつまりmapを返す実装を考えた方がいい
935: (スップ Sd82-LOf1) 2017/11/21(火)22:16 ID:6BA+Ife8d(5/6) AAS
>>934
俺もそうは思ってるのだけどその読み込む処理をどうしたら綺麗にできるかなぁって悩みなんだ
マップ作ったあとに検索が綺麗なのかなとは思ってる
936(1): はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE) 2017/11/21(火)22:33 ID:KkY90WH60(2/2) AAS
文法的には LL(1) かな?
素朴なパーサコンビネータでも充分に足りるのでその手のライブラリを導入すると楽にパーサを作れると思う。
それはともかく、「>>922 みたいな」というだけの仕様では
・数値以外が設定値にくることもあるのか?
・要素に改行を含められるのか?
・エスケープも出来るようにするのか?
等々が読み取れないし、多分 >>922 は考えてないんじゃないかなと思う。
オレオレ設定ファイルフォーマットを考えるくらいなら TOML とかいったよくあるフォーマットを採用すれば
ライブラリが充実してたりして便利なので考えてみるといいかも。
937: (ワッチョイ 4178-kX9V) 2017/11/21(火)22:42 ID:uRVBPn0b0(2/2) AAS
ってかboostのPropertyTreeにiniパーサーがあるからそれ使うといいよ
938: (スップ Sd82-LOf1) 2017/11/21(火)22:42 ID:6BA+Ife8d(6/6) AAS
>>936
回答すると
数値以外もありうる
改行は値として入れない
エスケープってなんだろう?
xxxに関しては最大16文字の文字列(大文字小文字計52文字の組み合わせ)
たったこれだけでも深いね
ソフトウェアって神秘
939: (ワッチョイ a168-+5lI) 2017/11/21(火)23:00 ID:GhiisSyt0(2/2) AAS
ini-parserてのがなかなか良さそう
picojson,rapidxmlなどが好きな人にはいいかも
940: (ワッチョイ 869f-GXP8) 2017/11/22(水)02:34 ID:9vladmL60(1) AAS
構文解析したいならbisonでも使ったらいいんじゃね?
941: (ワッチョイ f9b3-AWKa) 2017/11/22(水)03:34 ID:ft6g9THr0(1) AAS
ム板で公開されたのがあったじゃないか。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.344s*