5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net

1 :デフォルトの名無しさん:2016/11/06(日) 22:58:02.60 ID:dU5z27As
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

前スレ
【初心者歓迎】C/C++室 Ver.99【環境依存OK】
http://echo.2ch.net/test/read.cgi/tech/1469177649/

625 :デフォルトの名無しさん:2017/04/15(土) 10:02:51.76 ID:Af1/s0zG
それでもヒントとして>>610への反論だったということだけは言っておこうか
「途中で宣言すると初期化もれしやすい」という風なことが書いてあるが
逆に>>610は何故、先頭で宣言したら初期化漏れしにくい、と考えたか
どういったコードを想定しているかってことだな
要するに>>610はブロックや関数の先頭だけ見れば初期化漏れしていることが直ぐわかると便利だね
って言いたいんだろうけど、それはどういうコーディングルールの元に言えることか
ということだな

626 : ◆QZaw55cn4c :2017/04/16(日) 17:51:30.33 ID:3PeEvH/A
for(int i = ...; ; ) が書けるようになったのは素直にありがたいな,と感じている

627 :デフォルトの名無しさん:2017/04/23(日) 23:52:45.18 ID:IUq/7GPJ
>>626
脳の進化が20年前で止まったチンパンはc89でも使ってろ

628 :デフォルトの名無しさん:2017/04/24(月) 20:45:20.10 ID:et30sNFg
うきー

629 : ◆QZaw55cn4c :2017/04/25(火) 04:20:41.84 ID:Vqnsayjn
>>627
C99 or later で便利になったことなんて,そんなにないんだよね‥

630 :デフォルトの名無しさん:2017/04/25(火) 06:08:12.88 ID:X14wy5zc
数値計算とか特殊用途なライブラリ追加ってイメージ。
そりゃ、手間の割に汎用性がなかったら対応コンパイラも出てこないわ。

631 :デフォルトの名無しさん:2017/04/25(火) 22:55:58.60 ID:EbISA0IE
インライン関数も行コメントもboolもrestrict も無しで
どうやってプログラム書いてんのか想像もつかない
snprintf無しとか無理ゲーだろ

632 :デフォルトの名無しさん:2017/04/26(水) 02:18:40.34 ID:Kw1ZNGm3
restrict無しが想像つかないってどういうことだろ

633 :デフォルトの名無しさん:2017/04/26(水) 09:07:13.88 ID:bRGeq+mw
restrict使ったことないなあ
大きく最適化されるの?

634 :デフォルトの名無しさん:2017/04/26(水) 09:13:52.17 ID:rDz6/6sg
最適化はあんま気にしてなくて意味的なものかな
memcpyとmemmoveみたいな

635 :デフォルトの名無しさん:2017/04/26(水) 09:20:57.15 ID:A4NmaPdj
そう言う機能はメーカー独自実装でC99決まるずっと前からスタンダードだったから、C99って実感が無い。。。

636 :デフォルトの名無しさん:2017/04/26(水) 11:36:23.97 ID:O9yeoh6Z
>>631
いやいやそれはさすがに想像力足りなくね?

snprintf無しは無理ゲーなのは同意するが

637 :デフォルトの名無しさん:2017/05/05(金) 00:51:04.53 ID:evlI6rq7
void func(hoge)
int hoge;
{}
こんな書き方があったん?

638 :デフォルトの名無しさん:2017/05/05(金) 01:30:10.63 ID:PzvORh1V
>>637
詳しくは k&r style とかでググればいいけど今時知る必要はほぼないと思う

639 :デフォルトの名無しさん:2017/05/05(金) 15:05:47.25 ID:9iyukdGg
K&R1 だね、引数の型チェックができないから不便かつミスを誘発しやすい

640 :デフォルトの名無しさん:2017/05/07(日) 00:55:58.17 ID:uDdo3knt
使われなくなった過去の異物に優劣語り出すとか
老人やべーな

641 :片山博文MZ ◆T6xkBnTXz7B0 :2017/05/07(日) 00:58:01.39 ID:gTai4K61
×異物
○遺物

642 :デフォルトの名無しさん:2017/05/07(日) 01:41:21.28 ID:zkvqzaCu
誰も優を語ってない訳だが

643 :デフォルトの名無しさん:2017/05/07(日) 15:54:40.58 ID:s2OM55fz
ストラウストラップの本って読む価値ありますか?

644 :デフォルトの名無しさん:2017/05/07(日) 22:28:38.36 ID:fUCVOwEA
著書全般の基本的な傾向としては万人向けの価値はない
物事の意味や本質を学び考え悩み理解しようとする人向けの本であって
うわべだけの丸暗記やコピペで即結論や結果を求める人向けの本ではないから

645 :デフォルトの名無しさん:2017/05/07(日) 22:36:06.44 ID:f9jMnLHr
読む価値はあるが嘘が多いので騙されない注意が必要

646 :デフォルトの名無しさん:2017/05/07(日) 23:30:36.93 ID:s2OM55fz
>>644
>>645
上級者向けの本みたいなので
買うのは先に延ばしたいと思います...
一冊高いのもありますが
サンクスです

647 :デフォルトの名無しさん:2017/05/19(金) 15:26:03.09 ID:49hF9eg/
はぁ〜〜〜〜
安易にC++に手を出すんじゃなかった

648 :デフォルトの名無しさん:2017/05/20(土) 12:15:32.26 ID:Niypv3FQ
変人や御用達の言語だからな
馬鹿のくせにプライド高い老害しか使ってないイメージ

649 :デフォルトの名無しさん:2017/05/20(土) 12:51:51.67 ID:Nls5mnQ9
>>648
その手の人らの声が大きいだけだよ。特にこんなところでは。

650 :デフォルトの名無しさん:2017/05/20(土) 18:23:23.08 ID:PYbACk+S
みんな黙ってC++だよ

651 :デフォルトの名無しさん:2017/05/23(火) 00:42:13.85 ID:9/IkIyOw
ちょっとした確認なんだけどさ、
デストラクタが空っぽ (デフォルトデストラクタ) でもオブジェクトを後始末するための何らかの処理はするよね?

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

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

という状況だと見かけ上はクラス B のオブジェクトには後始末すべきものは何もないように見えるけど、
デストラクタが呼ばれないのはやっぱあかんよな?

652 :デフォルトの名無しさん:2017/05/23(火) 04:48:39.03 ID:pt6Ia/HA
うん

653 :デフォルトの名無しさん:2017/05/23(火) 09:20:18.86 ID:J4YcG+3k
>>651
はい
規格上もデストラクタがvirtualでないBのオブジェクトをA*に入れてdeleteした場合未定義動作だよ

654 :デフォルトの名無しさん:2017/05/23(火) 10:48:08.30 ID:Ip/q9ayQ
未定義動作多すぎだなこの言語。
よくここまで生き残れたな。

655 :デフォルトの名無しさん:2017/05/23(火) 11:01:35.25 ID:3W0XlzKr
未定義部分を各社が好きに定義してたからね。
VC++だとこう動くけど、g++だとこう動く、みたいな。

656 :デフォルトの名無しさん:2017/05/23(火) 12:45:18.14 ID:hcbwXZ+h
>>653
横からだけど、それまじ?
出来れば、規格で書かれてる場所教えて欲しい。

不安に思いながらも、一個作っちゃったんだよな…
動作確認済みだから、直ちに問題があるわけではないんだけど、未定義と聞くと将来的には修正しておきたい…

657 :デフォルトの名無しさん:2017/05/23(火) 13:25:39.67 ID:I6yYOIGb
>規格で書かれてる場所教えて欲しい

delete式の説明の最初のページに書かれていることが探せないというのは
場所を教えられたところでそもそも規格を保有していないのではないか

658 :デフォルトの名無しさん:2017/05/23(火) 13:25:57.75 ID:YY4qnA2y
>>656
意図して作ったの?バグじゃなくて?

659 :デフォルトの名無しさん:2017/05/23(火) 15:16:19.75 ID:0tdmeFKn
htmlとその解釈に悩まされるよりはマシ

660 :653:2017/05/23(火) 15:21:53.55 ID:Ek6JChT/
>>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:54.34 ID:EZJXMIkJ
C++があまりに不安な要素をたくさん抱えているお陰で未だに新生言語が多数出てくると
思えばいいじゃん?

662 :デフォルトの名無しさん:2017/05/23(火) 19:47:58.75 ID:rsJqfxq0
継承すんなよ

663 :デフォルトの名無しさん:2017/05/24(水) 00:55:48.61 ID:WEdzXALv
>>658
意図して作った。
悪しき方法とは思いつつも、stringクラスにsprintf 的な機能のメンバ関数作ったった。
その時、stringクラスの全機能を実装するのがめんどくさかったんで public 継承で。
メモリレイアウトは一切変わらない事を見切った上でだが、未定義だとすると…ヤベ。

664 :デフォルトの名無しさん:2017/05/24(水) 00:56:49.58 ID:WEdzXALv
ん、まあ、deleteは使わないからセーフか?

665 :デフォルトの名無しさん:2017/05/24(水) 01:00:58.95 ID:WEdzXALv
>>657
ドラフトしか持ってない…
delete 使う事は頭になかったから気付かなかった。
ありがとう。

>>660
おぉ、ピンポイント情報あざす。早速確認してみる。

666 :デフォルトの名無しさん:2017/05/24(水) 12:01:47.91 ID:/RGvDc8r
メモリレイアウトが変わらない範囲で既存のクラスを再オープンして機能を追加する方法の提案だけは出てたような気がする。

667 :デフォルトの名無しさん:2017/05/24(水) 12:06:31.74 ID:/RGvDc8r
>>663
例外関連のなんたらかんたらの処理 (stack unwinding) がかかわってくるんじゃなかったっけ。
正常系では普通に動いているように見えても何がどうなってるかわからんぞ

668 :デフォルトの名無しさん:2017/05/24(水) 13:51:37.65 ID:OqDgfclu
>>658の話の場合、別に”string *のポインタで”継承したやつをdeleteしない限り大丈夫でしょ
>>651で言うところの
・B* を A* にキャストしたものを delete
これが問題になるんであって

B*からdeleteして中身もBなら問題にならないと思うけど

669 :デフォルトの名無しさん:2017/05/24(水) 14:15:44.36 ID:ttKQmf2U
>>668
std::vector<std::string>に入れたら死ぬってことだよね??

670 :デフォルトの名無しさん:2017/05/24(水) 14:47:39.17 ID:/RGvDc8r
>>669
ポインタを std::string* に入れてなおかつそれを std::string* のままで delete したらあかんという話。
値を std::string にキャストする分にはなにも問題はない。

671 :デフォルトの名無しさん:2017/05/24(水) 15:58:36.11 ID:ttKQmf2U
>>670
だからstd::vector<std::string>にいれらんないよね?

672 :デフォルトの名無しさん:2017/05/24(水) 17:02:32.05 ID:/RGvDc8r
>>671
何を言いたいのかよくわからんが……。
std::string を継承した型は、レイアウトが変わらないようにしたからと言って (キャストなしで) std::string には入らないよ。
言いたいことを具体的にコードで示してくれんか

673 :デフォルトの名無しさん:2017/06/03(土) 20:46:07.15 ID:/cDPk3Lb
>>672
http://ideone.com/akrJQA

674 :デフォルトの名無しさん:2017/06/04(日) 05:01:25.52 ID:a4MXR2y0
テンプレート構造体を作りその配列をクラスのメンバに含めたいのですが上手くいきません。

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

どのようにすればテンプレート構造体をクラスのメンバにすることが出来るのでしょうか?
もしくは、このような機能を持つクラスを実装するためにはどうすればいいのでしょうか?
よろしくお願いします。

178 KB
新着レスの表示

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)