[過去ログ] 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
603: 2017/04/06(木)22:33 ID:Ao1zg6OQ(1) AAS
>>601
coroutineの事なら根本的な所が違うから勘違いしないようにな
604: 2017/04/07(金)20:08 ID:cdWiLUH2(1) AAS
馬鹿の特長:目的/機能の違いと実現するための実装の違いの区別がつかない
605
(2): 2017/04/08(土)12:56 ID:TFmwEDa6(1) AAS
C#のawaitはGUIのスレッドを意識出来るので有用だが
C++のawaitはただ裏で走らせるだけの機能的には劣化版な気がしてならない
606: 2017/04/08(土)13:14 ID:bfo0YVHI(1) AAS
>>605
c++で標準的なgui使うとすると何になるの?
607: 2017/04/08(土)13:49 ID:xnWSKOe7(1) AAS
>>605
そりゃ C++ と C# のポリシーの違いだろ
608: 2017/04/09(日)22:32 ID:nTEmq1X3(1) AAS
C使ってる人で変数宣言を途中に書く人いる?
やめた方がいい?
609: 2017/04/09(日)23:00 ID:gthRNL4S(1) AAS
むしろそうして欲しいかな
勿論ブロックスコープは意識してる前提で
610
(1): 2017/04/14(金)09:11 ID:ezi5K97R(1) AAS
初期のCはブロック先頭しかコンパイルが通らない
コンストラクタも型推論もないのに途中に置くメリットが少ない
初期化漏れというモンスターの隠れ家になりやすい
611: 2017/04/14(金)10:33 ID:L6e5ZQwW(1/2) AAS
一応Cで書くときは関数ブロック直後に書いてるけど、それはそれでforで使うiとかを使い回す事になるから、C++みたくプログラマの良識を信じて(ブロックを意識して変数宣言すると信じて)、好きな場所で宣言出来た方が正解なんだろうな。
612: 2017/04/14(金)10:35 ID:L6e5ZQwW(2/2) AAS
出来た方がと言うか、今は出来るんだから、した方が正解に訂正。
613: 2017/04/14(金)12:59 ID:Hdztr2ik(1) AAS
出来ることと乱用していいことはイコールでない
一瞬だけの一時変数を直前で宣言するのならありだけど
関数全体で使うなら頭で宣言すべきだし、そもそも中間で宣言するような長い関数は
短くなるよう見直すべき
614: 2017/04/14(金)13:04 ID:xSRtCFhF(1) AAS
魔法の言葉
ケースバイケース
615: 2017/04/14(金)19:32 ID:UiWlchtO(1) AAS
スコープは可能な限り狭く

おじいちゃんの遺言
616: 2017/04/14(金)19:38 ID:PNQsiXg9(1) AAS
初期化漏れはブロック先頭でしかかけない方が起こしやすいだろう

長い範囲で使う変数でも、変数ははじめて使うところで宣言した方が分かりやすいしバグも減る。
617: 2017/04/14(金)20:04 ID:Z/bjVn5R(1/2) AAS
初期化忘れ防止はどこで宣言したってあんま関係ないというか
大差ないだろうな実際
必要になった時点で宣言するってことでよいと思う
さもないと上手くいかない場合もあるし
いちいち使いもしない「ダミーの値」で初期化するのは馬鹿らしいし
余計にバグりそう
618
(1): 2017/04/14(金)20:13 ID:Z/bjVn5R(2/2) AAS
auto result = func();
まぁこういう風にしたいわな

int result = 0;
・・・
result = func();
↑その「0」って初期化値は何なんですか、何を意味した「0」なんですか
では0の代わりに1で初期化したらどうなるんですか
この初期化値の意味は一体何なんですか
ってことになるしな
結局「0」とか「1」とかの初期化値はダミーでありプログラム上なんの意味もなかったりするし
省7
619: 2017/04/14(金)21:45 ID:spQE74XB(1) AAS
老人の「昔は良かった」を見て顔真っ赤にして論破しようとマジレス
みっともない
620: 2017/04/14(金)23:47 ID:9eRQSDOY(1) AAS
必要なものを必要なときに宣言する
それだけの話
621: 2017/04/15(土)09:16 ID:RtikNDCG(1/2) AAS
>>618
>この初期化値の意味は一体何なんですかってことになるしな

勝手に無駄な初期化しておいてどれだけ頭が悪いんだぜ
ぜんぜややこしくない
お前が馬鹿なだけ
622
(1): 2017/04/15(土)09:26 ID:Af1/s0zG(1/3) AAS
もともとが
初期化忘れを防ぐためには関数の先頭で宣言〜
への反論だったからだぜ
623: 2017/04/15(土)09:41 ID:RtikNDCG(2/2) AAS
>622
日本語もわからないチンパンは無理して
コンピュータ使わなくても
祖国でオナニーしてればいいんだぜ
624: 2017/04/15(土)09:50 ID:Af1/s0zG(2/3) AAS
君の疑問がどこにあるのか本当にわからないからどうでもよい
625: 2017/04/15(土)10:02 ID:Af1/s0zG(3/3) AAS
それでもヒントとして>>610への反論だったということだけは言っておこうか
「途中で宣言すると初期化もれしやすい」という風なことが書いてあるが
逆に>>610は何故、先頭で宣言したら初期化漏れしにくい、と考えたか
どういったコードを想定しているかってことだな
要するに>>610はブロックや関数の先頭だけ見れば初期化漏れしていることが直ぐわかると便利だね
って言いたいんだろうけど、それはどういうコーディングルールの元に言えることか
ということだな
626
(1): ◆QZaw55cn4c 2017/04/16(日)17:51 ID:3PeEvH/A(1) AAS
for(int i = ...; ; ) が書けるようになったのは素直にありがたいな,と感じている
627
(1): 2017/04/23(日)23:52 ID:IUq/7GPJ(1) AAS
>>626
脳の進化が20年前で止まったチンパンはc89でも使ってろ
628: 2017/04/24(月)20:45 ID:et30sNFg(1) AAS
うきー
629: ◆QZaw55cn4c 2017/04/25(火)04:20 ID:Vqnsayjn(1) AAS
>>627
C99 or later で便利になったことなんて,そんなにないんだよね‥
630: 2017/04/25(火)06:08 ID:X14wy5zc(1) AAS
数値計算とか特殊用途なライブラリ追加ってイメージ。
そりゃ、手間の割に汎用性がなかったら対応コンパイラも出てこないわ。
631
(1): 2017/04/25(火)22:55 ID:EbISA0IE(1) AAS
インライン関数も行コメントもboolもrestrict も無しで
どうやってプログラム書いてんのか想像もつかない
snprintf無しとか無理ゲーだろ
632: 2017/04/26(水)02:18 ID:Kw1ZNGm3(1) AAS
restrict無しが想像つかないってどういうことだろ
633: 2017/04/26(水)09:07 ID:bRGeq+mw(1) AAS
restrict使ったことないなあ
大きく最適化されるの?
634: 2017/04/26(水)09:13 ID:rDz6/6sg(1) AAS
最適化はあんま気にしてなくて意味的なものかな
memcpyとmemmoveみたいな
635: 2017/04/26(水)09:20 ID:A4NmaPdj(1) AAS
そう言う機能はメーカー独自実装でC99決まるずっと前からスタンダードだったから、C99って実感が無い。。。
636: 2017/04/26(水)11:36 ID:O9yeoh6Z(1) AAS
>>631
いやいやそれはさすがに想像力足りなくね?

snprintf無しは無理ゲーなのは同意するが
637
(1): 2017/05/05(金)00:51 ID:evlI6rq7(1) AAS
void func(hoge)
int hoge;
{}
こんな書き方があったん?
638: 2017/05/05(金)01:30 ID:PzvORh1V(1) AAS
>>637
詳しくは k&r style とかでググればいいけど今時知る必要はほぼないと思う
639: 2017/05/05(金)15:05 ID:9iyukdGg(1) AAS
K&R1 だね、引数の型チェックができないから不便かつミスを誘発しやすい
640: 2017/05/07(日)00:55 ID:uDdo3knt(1) AAS
使われなくなった過去の異物に優劣語り出すとか
老人やべーな
641: 片山博文MZ ◆T6xkBnTXz7B0 2017/05/07(日)00:58 ID:gTai4K61(1) AAS
×異物
○遺物
642: 2017/05/07(日)01:41 ID:zkvqzaCu(1) AAS
誰も優を語ってない訳だが
643: 2017/05/07(日)15:54 ID:s2OM55fz(1/2) AAS
ストラウストラップの本って読む価値ありますか?
644
(1): 2017/05/07(日)22:28 ID:fUCVOwEA(1) AAS
著書全般の基本的な傾向としては万人向けの価値はない
物事の意味や本質を学び考え悩み理解しようとする人向けの本であって
うわべだけの丸暗記やコピペで即結論や結果を求める人向けの本ではないから
645
(1): 2017/05/07(日)22:36 ID:f9jMnLHr(1) AAS
読む価値はあるが嘘が多いので騙されない注意が必要
646: 2017/05/07(日)23:30 ID:s2OM55fz(2/2) AAS
>>644
>>645
上級者向けの本みたいなので
買うのは先に延ばしたいと思います...
一冊高いのもありますが
サンクスです
647: 2017/05/19(金)15:26 ID:49hF9eg/(1) AAS
はぁ〜〜〜〜
安易にC++に手を出すんじゃなかった
648
(1): 2017/05/20(土)12:15 ID:Niypv3FQ(1) AAS
変人や御用達の言語だからな
馬鹿のくせにプライド高い老害しか使ってないイメージ
649: 2017/05/20(土)12:51 ID:Nls5mnQ9(1) AAS
>>648
その手の人らの声が大きいだけだよ。特にこんなところでは。
650: 2017/05/20(土)18:23 ID:PYbACk+S(1) AAS
みんな黙ってC++だよ
651
(2): 2017/05/23(火)00:42 ID:9/IkIyOw(1) AAS
ちょっとした確認なんだけどさ、
デストラクタが空っぽ (デフォルトデストラクタ) でもオブジェクトを後始末するための何らかの処理はするよね?

よくあるスライシングの問題で、

・クラス A をクラス B が継承している
・クラス A のデストラクタは virtual が付いていない
・クラス B のデストラクタはデフォルトデストラクタ
・クラス B はメンバ変数を持っていない
・B* を A* にキャストしたものを delete

という状況だと見かけ上はクラス B のオブジェクトには後始末すべきものは何もないように見えるけど、
デストラクタが呼ばれないのはやっぱあかんよな?
652: 2017/05/23(火)04:48 ID:pt6Ia/HA(1) AAS
うん
653
(3): 2017/05/23(火)09:20 ID:J4YcG+3k(1) AAS
>>651
はい
規格上もデストラクタがvirtualでないBのオブジェクトをA*に入れてdeleteした場合未定義動作だよ
654: 2017/05/23(火)10:48 ID:Ip/q9ayQ(1) AAS
未定義動作多すぎだなこの言語。
よくここまで生き残れたな。
655: 2017/05/23(火)11:01 ID:3W0XlzKr(1) AAS
未定義部分を各社が好きに定義してたからね。
VC++だとこう動くけど、g++だとこう動く、みたいな。
656
(2): 2017/05/23(火)12:45 ID:hcbwXZ+h(1) AAS
>>653
横からだけど、それまじ?
出来れば、規格で書かれてる場所教えて欲しい。

不安に思いながらも、一個作っちゃったんだよな…
動作確認済みだから、直ちに問題があるわけではないんだけど、未定義と聞くと将来的には修正しておきたい…
657
(1): 2017/05/23(火)13:25 ID:I6yYOIGb(1) AAS
>規格で書かれてる場所教えて欲しい

delete式の説明の最初のページに書かれていることが探せないというのは
場所を教えられたところでそもそも規格を保有していないのではないか
658
(2): 2017/05/23(火)13:25 ID:YY4qnA2y(1) AAS
>>656
意図して作ったの?バグじゃなくて?
659: 2017/05/23(火)15:16 ID:0tdmeFKn(1) AAS
htmlとその解釈に悩まされるよりはマシ
660
(1): 653 2017/05/23(火)15:21 ID:Ek6JChT/(1) AAS
>>656
俺もworking draftしかないけどn3690の5.3.5の3段落目

In the first alternative (delete object), if the static type of the object to be deleted is different from its
dynamic type, the static type shall be a base class of the dynamic type of the object to be deleted and the
static type shall have a virtual destructor or the behavior is undefined.
661: 2017/05/23(火)17:00 ID:EZJXMIkJ(1) AAS
C++があまりに不安な要素をたくさん抱えているお陰で未だに新生言語が多数出てくると
思えばいいじゃん?
662: 2017/05/23(火)19:47 ID:rsJqfxq0(1) AAS
継承すんなよ
663
(1): 2017/05/24(水)00:55 ID:WEdzXALv(1/3) AAS
>>658
意図して作った。
悪しき方法とは思いつつも、stringクラスにsprintf 的な機能のメンバ関数作ったった。
その時、stringクラスの全機能を実装するのがめんどくさかったんで public 継承で。
メモリレイアウトは一切変わらない事を見切った上でだが、未定義だとすると…ヤベ。
664: 2017/05/24(水)00:56 ID:WEdzXALv(2/3) AAS
ん、まあ、deleteは使わないからセーフか?
665: 2017/05/24(水)01:00 ID:WEdzXALv(3/3) AAS
>>657
ドラフトしか持ってない…
delete 使う事は頭になかったから気付かなかった。
ありがとう。

>>660
おぉ、ピンポイント情報あざす。早速確認してみる。
666: 2017/05/24(水)12:01 ID:/RGvDc8r(1/4) AAS
メモリレイアウトが変わらない範囲で既存のクラスを再オープンして機能を追加する方法の提案だけは出てたような気がする。
667: 2017/05/24(水)12:06 ID:/RGvDc8r(2/4) AAS
>>663
例外関連のなんたらかんたらの処理 (stack unwinding) がかかわってくるんじゃなかったっけ。
正常系では普通に動いているように見えても何がどうなってるかわからんぞ
668
(1): 2017/05/24(水)13:51 ID:OqDgfclu(1) AAS
>>658の話の場合、別に”string *のポインタで”継承したやつをdeleteしない限り大丈夫でしょ
>>651で言うところの
・B* を A* にキャストしたものを delete
これが問題になるんであって

B*からdeleteして中身もBなら問題にならないと思うけど
669
(1): 2017/05/24(水)14:15 ID:ttKQmf2U(1/2) AAS
>>668
std::vector<std::string>に入れたら死ぬってことだよね??
670
(1): 2017/05/24(水)14:47 ID:/RGvDc8r(3/4) AAS
>>669
ポインタを std::string* に入れてなおかつそれを std::string* のままで delete したらあかんという話。
値を std::string にキャストする分にはなにも問題はない。
671
(1): 2017/05/24(水)15:58 ID:ttKQmf2U(2/2) AAS
>>670
だからstd::vector<std::string>にいれらんないよね?
672
(1): 2017/05/24(水)17:02 ID:/RGvDc8r(4/4) AAS
>>671
何を言いたいのかよくわからんが……。
std::string を継承した型は、レイアウトが変わらないようにしたからと言って (キャストなしで) std::string には入らないよ。
言いたいことを具体的にコードで示してくれんか
673: 2017/06/03(土)20:46 ID:/cDPk3Lb(1) AAS
>>672
外部リンク:ideone.com
674
(2): 2017/06/04(日)05:01 ID:a4MXR2y0(1) AAS
テンプレート構造体を作りその配列をクラスのメンバに含めたいのですが上手くいきません。

作りたいクラスはスタックとして使えるもので、
主な作りたいメンバは、二つの型のメンバ変数を持つ上記のテンプレート構造体の配列。
引数としてテンプレート構造体を持ち、上記の配列に順次プッシュしていく関数。
最後にプッシュされた構造体をポップする関数、という3つです。

どのようにすればテンプレート構造体をクラスのメンバにすることが出来るのでしょうか?
もしくは、このような機能を持つクラスを実装するためにはどうすればいいのでしょうか?
よろしくお願いします。
675: 2017/06/04(日)08:23 ID:7To+hzFq(1) AAS
まず
using テンプレート構造体の型 = 構造体テンプレート<型パラメーター>;
をします
676: 2017/06/04(日)11:02 ID:4s9JqZC9(1/5) AAS
>>674
外部リンク:ideon.com
677: 2017/06/04(日)11:02 ID:4s9JqZC9(2/5) AAS
外部リンク:ideone.com
678
(1): 2017/06/04(日)21:12 ID:0J0aNZ4Z(1/2) AAS
質問への回答はいいとして
たった100行のコードによくもここまでUNKOを詰め込めるものだと感心
679
(1): 2017/06/04(日)21:24 ID:4s9JqZC9(3/5) AAS
>>678
どこ?教えて
680
(2): 2017/06/04(日)22:06 ID:0J0aNZ4Z(2/2) AAS
>>679
細かくは見てないがぱっと見て気になったのは、
殆どが「= default」で済むものを自前で定義する所とか
K,Vの左辺値が渡せないunkoコンストラクターとか
左辺値が渡せないpush関数とか
key_value_pair_stackの外で定義されたdefault_max_sizeとか
禁断の「value_type pop()」とか
ムーブ代入だけ何故か無いとか
例外安全を考慮しないswapとか
constexprの付いていない関数が多数とか
省7
681: 2017/06/04(日)22:21 ID:4s9JqZC9(4/5) AAS
>>680
ありがとう
見直してみる
682
(1): 2017/06/04(日)23:59 ID:4s9JqZC9(5/5) AAS
>>680の指摘を受けて修正したやつ
外部リンク:ideone.com
683
(2): 2017/06/05(月)07:13 ID:dSqD3vhj(1/3) AAS
>>682
20秒ほど眺めたがとりあえず3つほどなおした方がいい
・key_のメンバー宣言に{}が付いていないと、修正前と同じ動作にならない
・popの戻りはvoidにした方が無難
・clear()しても要素のデストラクターが呼ばれないのでstatic_assert(std::is_trivial_destructible<element_type>::value,"未対応")しとくのが礼儀
684
(1): 2017/06/05(月)08:02 ID:SbeuyTlX(1) AAS
>>683
一つ目だけ意味がわからない…28行目のこと??なんで?
685
(1): 2017/06/05(月)08:16 ID:dSqD3vhj(2/3) AAS
>>684
その通り28行目
struct X {
 some_type m1 /* {} */;
 X() = default;
};
ここでsome_typeの初期化{}が無いとm1は未初期化になるし、
some_typeにデフォルトコンストラクターが無ければX()の「=default」が「=delete」扱いになる
686
(1): 2017/06/05(月)08:25 ID:CMNJImQI(1/2) AAS
>>685
なるほど…これってデフォルトコンストラクタ自前で書いてメンバイニシャライザに書いても同じだよね?
valueも同様にイニシャライズしなきゃだめだよね?
687
(1): 2017/06/05(月)12:04 ID:dSqD3vhj(3/3) AAS
>>686
1:Yes, 2:Yes

struct X {string m; X()=default;};
struct X {int m{}; X()=default;};
struct X {int m; X() : m() {}};
はmが初期化される
struct X {int m; X()=default;};
が初期化されない
688: 2017/06/05(月)12:34 ID:CMNJImQI(2/2) AAS
>>687
ありがとう
689: 2017/06/05(月)21:07 ID:YRHwBsQU(1) AAS
空のvectorをpop_backした時の仕様がクソ過ぎるC++
690: 2017/06/05(月)23:54 ID:vnQWBbWO(1) AAS
亀レスで申し訳ありません、>>674です
とりあえずレベルが足りないことが分かったので、もう少し勉強してからいただいたコード解読してみます。
答えてくださった方ありがとうございました。
691: 2017/06/06(火)07:02 ID:ueF+TYcD(1) AAS
気にすんな
簡単なことすんのにもこの難易度な言語がおかしい
692
(1): 2017/06/06(火)17:35 ID:zF6NOqag(1/3) AAS
というかほとんどがムーブとかconst版とかconstexprとか、とことん丁寧にやろうとした場合の作法まで
含めた突っ込みだから、初心者が気にするような話ではないなw

そもそも、最近右辺値参照使ったコードを「書かないといけない」と誤解してる人が多い気がするんだが
あんなもん「ポインタのすげ替えで済む場合」にそれを出来るようにするための仕組みで、
まず左辺値版を書いた上で、右辺値版も書けば速くなるよ、ってだけだよね?

上記に該当しようがしまいがまず左辺値版は必須だし(左辺値を弾きたいならともかく)
該当する場合に高速化したければ右辺値版も書けばいいというだけで
これまた初心者が気にするような話ではないw
693: 2017/06/06(火)18:16 ID:uCSRK7Ay(1/2) AAS
>>692
>右辺値版も書けば速くなるよ、ってだけだよね?
お前の中ではそうなんだろうな
694
(1): 2017/06/06(火)18:58 ID:zF6NOqag(2/3) AAS
違うというなら例ぐらい挙げてくれよ
695: 2017/06/06(火)19:28 ID:+mNKSnZM(1) AAS
そういうのはスルーでok
696
(1): 2017/06/06(火)22:23 ID:uCSRK7Ay(2/2) AAS
>>694
こういうのはワンポイントTipじゃなくて概念の理解だからね
『ムーブセマンティクスのため』と答えを言ったところで
君は理解できないんだろう?
697
(1): 2017/06/06(火)23:19 ID:zF6NOqag(3/3) AAS
>>696
ドヤ顔で用語を挙げろなどとは一言も言っていないのだがw
698
(2): 2017/06/07(水)00:10 ID:xZGjq0dG(1) AAS
>>697
『ムーブセマンティクス』が君の求めた
例そのものなんだよ
でも君の頭脳では概念を理解できないから
説明する気もないし
わからなくても心配しなくていいよ
699
(1): 2017/06/07(水)00:22 ID:2ipgwMGH(1) AAS
教える側界隈の高度なやり取りだけで終始しないでほしいんですけど、、
700
(1): 2017/06/07(水)00:27 ID:gn2mDiBA(1/2) AAS
>>699
ヒント:unique_ptrのムーブは性能目的ではない
701
(1): 2017/06/07(水)00:54 ID:CXRZvrBM(1/2) AAS
>>698
こっちは疑問形で書いてんだから普通に指摘してくれりゃいいんじゃねーの?
なんかコンプでも抱えてんのかね

unique_ptrみたいな所有権の移動の実現(を楽に実装する)は確かに気付いてなかったが
初心者が気にするような話ではない&いつも書かなければならないものではない、に対する反論になってないよな
ちょっとした指摘をそこまで煽って書ける神経が理解できん
702
(1): 700 2017/06/07(水)06:42 ID:gn2mDiBA(2/2) AAS
ちなみに俺は>>698ではない
そうぞうで書いた
1-
あと 300 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.093s*