C++相談室 part102
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2013/05/12(日) 08:19:43.22ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part101
http://toro.2ch.net/test/read.cgi/tech/1365231795/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.84【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1367137639/
■長いソースを貼るときはここへ。■
http://codepad.org/
http://ideone.com/
0153デフォルトの名無しさん
2013/05/17(金) 19:31:47.68ところでラベルステートメントって?何ソレ?
0154デフォルトの名無しさん
2013/05/17(金) 22:23:09.86たぶんラベル付きステートメントのことでgotoの飛び先やcaseとかのこと
もちろんC++固有でなくCから持ってきたものだけど
0155デフォルトの名無しさん
2013/05/17(金) 22:57:09.64それともC++がクソ文化なの?
0156デフォルトの名無しさん
2013/05/17(金) 23:19:24.670157デフォルトの名無しさん
2013/05/17(金) 23:34:23.55ウンコウンコいいながらこのスレに執着してる奴ってどんだけウンコ好きなんだよ
571 デフォルトの名無しさん sage 2013/04/30(火) 15:54:06.35
C++は本当にKUSOだな。
上級者でも(むしろ上級者ほど)規格片手にコード
書かなきゃいけない言語はおかしいだろ。
何のためのプログラミング言語だよ
628 デフォルトの名無しさん sage 2013/05/01(水) 19:41:52.32
やはりC++はブリブリUNKO
おまえらパソコンの大先生が古文書片手に議論しても
意見がまとまらないなんて、国際標準が意味をなしてない
0158デフォルトの名無しさん
2013/05/17(金) 23:48:35.03信じていいんだな?
信じるぞ
0159デフォルトの名無しさん
2013/05/17(金) 23:57:01.170160デフォルトの名無しさん
2013/05/18(土) 00:02:24.77君が正しくプログラムを書いていればな
例えば解放が必要なリソースを持っているクラスのデストラクタに解放処理を書くのを忘れたりすれば
デストラクタが呼ばれてそのクラス自体は解放されたとしても問題なく解放されたとはいえない
0161デフォルトの名無しさん
2013/05/18(土) 00:12:57.11>>135
コンストラクタとデストラクタにログ入れて
対になっているか確認してから出直せ
0162デフォルトの名無しさん
2013/05/18(土) 00:21:02.72C#やる人はダサい。
0163デフォルトの名無しさん
2013/05/18(土) 00:40:12.250164デフォルトの名無しさん
2013/05/18(土) 02:14:20.50どうすればいいですが
void* p = ...;
void* p32 = alignment( p, 32 );
こんな感じでやりたいです。
0165KUSO KOTE
2013/05/18(土) 02:31:14.41何がしたいのかよくわからないけど
こんな感じ?
http://ideone.com/IWrHRr
0166KUSO KOTE
2013/05/18(土) 03:11:34.14分岐と乗算除算は発狂する人がいるので
書き直してみた。寝る。
http://ideone.com/1HHyPq
0167デフォルトの名無しさん
2013/05/18(土) 03:24:04.280168デフォルトの名無しさん
2013/05/18(土) 05:24:02.530169デフォルトの名無しさん
2013/05/18(土) 06:51:36.18#include "my.h" //using namespace std;
これでok
0170デフォルトの名無しさん
2013/05/18(土) 07:18:56.92using namespace std;
}
これでok
0171デフォルトの名無しさん
2013/05/18(土) 07:26:14.32void fun(std::size_t)
は
void fun(decltype(sizeof(0)))
でok
0172デフォルトの名無しさん
2013/05/18(土) 07:34:41.59何言ってんのかイミフ
0173デフォルトの名無しさん
2013/05/18(土) 08:00:54.85これでいいだろ
これ以上は自分のコーディングstyleの
押しつけでしかない
0174デフォルトの名無しさん
2013/05/18(土) 09:49:33.09shared_ptr<CUnko> pUnko( new CUnko );
vpUnko.push_back( pUnko );
remove( vpUnko.begin(), vpUnko.end(), pUnko );
これでなぜかvpUnkoの要素数が1のまま変わらず、削除が行われません。
なぜpUnkoを見つけて削除することができないのでしょうか?
0175デフォルトの名無しさん
2013/05/18(土) 09:50:04.64すみません、最初は
vector<shared_ptr<CUnko>> vpUnko;
です。
0176174
2013/05/18(土) 10:00:02.33removeでは要素を詰めるだけでというのは覚えていたんですが、
要素数まで同じというのは把握していませんでした(汗)
0177デフォルトの名無しさん
2013/05/18(土) 10:04:12.13本っっ当にC++はKUSOだな
0178デフォルトの名無しさん
2013/05/18(土) 10:09:43.76俺にも>>169-172はイミフだ
167は文字通り読んでstdio.hとかが名前空間を汚染することについてか、
直前のコードから「using namespace std;」の話でc++標準ライブラリを脱字したかのどちらかだと思う。
(前者と仮定して168では後者の話を振った)
>>173
.cppにusing namespace std;書いてstd::minと衝突して学習者が爆死しかける教本書いた奴も死刑だと思うんだ。
0179デフォルトの名無しさん
2013/05/18(土) 10:15:11.520180デフォルトの名無しさん
2013/05/18(土) 10:19:23.40えっthisポインタを引数で渡す
同じクラスのメンバであれば、渡されたthisポインタ経由で非publicなメンバに特にキャストもせずにアクセスし得る
0181デフォルトの名無しさん
2013/05/18(土) 10:23:50.11>std::min
<algorithm>のアレか……(std::swap、std::max)
「グローバル名前空間空間にusing namespace std;」はホントに危険だよな……
0182デフォルトの名無しさん
2013/05/18(土) 10:25:27.41にも「それは違うとか言いだしそうな奴だな」
0183デフォルトの名無しさん
2013/05/18(土) 10:39:58.37ちょっ何を言っているのかわからない
class Foo {
int x;
public:
static int GetX(Foo* p) { return p->x; }
};
class Bar {
Foo obj;
public:
void ShowFooX() { std::cout << Foo::GetX(&obj) << std::endl; }
};
0184デフォルトの名無しさん
2013/05/18(土) 10:45:01.22例えばスレッドをクラス化したりするときの基本テクニックなんやな
0185デフォルトの名無しさん
2013/05/18(土) 12:42:01.18ヘッダに入れた時に、意図していない他人に
まで迷惑をかけるからだろ。
自分でわかっててcppに入れるのまで
文句を言われる筋合いはない。
それにstd::maxと被る問題なら
グローバルでなく関数スコープでusingしても同じ。
0186デフォルトの名無しさん
2013/05/18(土) 12:51:51.26>自動変数はもちろん扱える
>s/自動変数/非staticメンバ/
>どうやって非staticメンバを扱うのよ
>thisポインタを引数で渡す
static int GetX(Foo* p) { return p->x; }
>「privateなメンバには他クラスからアクセスできません」
にも「それは違うとか言いだしそうな奴だな」
>何を言っているのかわからない
どちらかというと>>183が
何を言っているのかわからない
0187デフォルトの名無しさん
2013/05/18(土) 13:05:11.84ところでinline namespaceって何ソレうまいの?
0188デフォルトの名無しさん
2013/05/18(土) 14:31:59.66http://www.youtube.com/watch?v=rycI46jG_Rg
.
円高デフレと産業の空洞化は、在日の戦略だった?
http://www.youtube.com/watch?v=iOKGvBsWtgg
0189デフォルトの名無しさん
2013/05/18(土) 15:49:53.75staticが「他のクラス」だからprivateにアクセスできないと思っているんだな
もう、どこから突っ込んでいいやらw
0190デフォルトの名無しさん
2013/05/18(土) 15:54:21.03他のコンポーネントを選択するなどして、フォーカスが外れることを何て言うんでしょうか?
「デフォーカス」?「アウトフォーカス」?
0191デフォルトの名無しさん
2013/05/18(土) 15:58:39.900192デフォルトの名無しさん
2013/05/18(土) 16:13:30.200193デフォルトの名無しさん
2013/05/18(土) 17:57:17.150194デフォルトの名無しさん
2013/05/18(土) 18:07:58.260195167
2013/05/18(土) 19:33:06.14分かりにくくてすいません
ようするにこういうコードが書きたかったんです…
#include<cstdlib>
namespace command{
enum Command{
exit ='c'
};
};
void some(const char *s){
using namespace command;
switch(s[0]){
case exit: // 関数exit(int)と衝突する
std:exit(0);
}
}
0196デフォルトの名無しさん
2013/05/18(土) 19:39:03.30なんなら
const int Exit = 'c';
といったように大文字で逃げたら?
0198KUSO KOTE
2013/05/18(土) 20:00:03.71衝突した所だけ command::exit にするのではいかんの?
絶対衝突させたくないならusingを使うこと
自体がおかしいと思う。
あとC++でexitはマジやめて。
0199デフォルトの名無しさん
2013/05/18(土) 20:03:06.930200デフォルトの名無しさん
2013/05/18(土) 22:07:24.11>逃げ方を訊いているわけではない
ああそれもそうか
と言うかC的にはexitとreturnは(main関数内では)同義だから使ったこと無いや……
using云々以前に例外投げるとかすべきやね、C++なんだし
0201デフォルトの名無しさん
2013/05/18(土) 22:29:15.14exit使う奴は低脳
0202デフォルトの名無しさん
2013/05/18(土) 23:38:54.62using command::exit; を足しちゃダメ?
0203デフォルトの名無しさん
2013/05/19(日) 00:01:53.12「using namespace std;はおまじない」と教える/覚えるのはヘッダに入れるよりもヤバイだろ
分かっててusing namespace std;してるなら問題ないが、それを区別する手段が…
0204167
2013/05/19(日) 00:29:51.57とりあえず今までそれで逃げてました
>>198
command::exitだと見づらく感じてしまうんですよね…
あと、実際のコードはマイコンの制御プログラムで、開発中マイコンをぶら下げっ放しにするのがウザいのでPC上でもビルドして動かせるようにしたものです。本体には終了という概念がなく、そのためのロジックも存在しないので、手っ取り早くexitしとけという発想です。
>>202
おおー、衝突が無くなりました
ありがとうございます
using宣言にはこんな効果もあるのですね
結局、ライブラリ関数がグローバルスコープにぶち撒けられる問題はいかんともしがたいのでしょうか
>>202の解法で問題は無くなりそうなんで、もういいのですが
0205デフォルトの名無しさん
2013/05/19(日) 00:55:58.77今時のマイコンはC++でも大丈夫なのか……
つか、usingディレクティブとusing宣言は別物だけどな↓
http://www.geocities.jp/ky_webid/cpp/language/018.html
0206デフォルトの名無しさん
2013/05/19(日) 01:05:28.320207デフォルトの名無しさん
2013/05/19(日) 01:15:16.88Cで作れるものにC++が使えない理由が無いだろ。
「今時の」とか、何言ってんの?
0208デフォルトの名無しさん
2013/05/19(日) 01:17:18.17じゃあ何が問題かっていうとROMサイズ。だから組み込み系は
Cが長かったんだけど、ROM単価が劇的に下がった今はもう
コードサイズの問題はほとんどなくなった。
0209デフォルトの名無しさん
2013/05/19(日) 01:29:26.56C言語対応してる→C++対応している、にはならないと思うけど?
0210デフォルトの名無しさん
2013/05/19(日) 02:04:58.66>>209
マイコンメーカの提供するCコンパイラではどーにもならんけど、gcc使えるマイコンであればバックエンド流用でg++も通るんじゃね
標準ライブラリの移植状況がまんま制約になるし、可能であるかとやるかどうかは別だろうが
ROMサイズだの処理速度だのコンパイラの性能向上だのでやりやすくはなってきてる…のかな
0211デフォルトの名無しさん
2013/05/19(日) 03:09:35.55C++使うことによって発生するコードサイズの問題って何のこと言ってるの?
同じコードコンパイルして差が出ることはないだろうし。
テンプレート使うようなコードをCでマクロやコピペで書けばコードサイズが減らせるわけでもないだろ。
0212デフォルトの名無しさん
2013/05/19(日) 03:23:59.17同等のロジックをクラス使って書くとオーバヘッドやバイナリコード量がちょっぴり増加する。
テンプレートは状況次第では一気に増える
・派生クラスを基底クラスにキャストして処理する
・同等のことをCでキャストやunion使って処理する
・同等のことをテンプレートで処理する
3つ目のケースで上2つと同等のバイナリコード量に潰せるコンパイラを期待するのは高望みじゃねぇかな?
0213デフォルトの名無しさん
2013/05/19(日) 03:25:27.932ちゃんの流行なのか。
世間一般ではそういうのを屁理屈って言うんだがな。
0214デフォルトの名無しさん
2013/05/19(日) 03:31:54.98記憶容量の単価というよりは単にアドレス空間の絶対量の問題では?
0215デフォルトの名無しさん
2013/05/19(日) 03:39:51.37「コードサイズが膨れるテンプレートの使い方をしない」って前提を置いてる211に対して言ってるんだよな?
>>214
空間だけあっても中身ないと駄目だし結局ROM/RAM容量の問題じゃないのかそれ
0216デフォルトの名無しさん
2013/05/19(日) 04:00:40.21使い方するような奴がバカだっていうだけだよなあ
そんな奴はどんな言語を使ったってダメだろう
0217デフォルトの名無しさん
2013/05/19(日) 04:05:04.66> 同じコードコンパイルするならC++使う意味も無いだろ。
同等のコードでも名前空間、型チェック、オーバーロードとか使って読みやすく、安全に
書けるようになるよ。
> 同等のロジックをクラス使って書くとオーバヘッドやバイナリコード量がちょっぴり増加する。
相当ひどいコンパイラ実装じゃないとそんなことにならないはずだけど・・・。
一般的に言えるってことならコード例を見せて欲しいな。
> テンプレートは状況次第では一気に増える
> ・派生クラスを基底クラスにキャストして処理する
> ・同等のことをCでキャストやunion使って処理する
> ・同等のことをテンプレートで処理する
> 3つ目のケースで上2つと同等のバイナリコード量に潰せるコンパイラを期待するのは高望みじゃねぇかな?
コードサイズを優先するならC++で書いても一番上のやつ選べばいいじゃん。
0218デフォルトの名無しさん
2013/05/19(日) 05:01:16.36そんな糞は捨てろとか言い出しそうだな。
埋め込みコンパイラ舐めんなよ。
0219デフォルトの名無しさん
2013/05/19(日) 05:32:29.89実際問題マイコンでのC++は放置されてたんだからその判断した当時の各種ベンダに言えよ。
「テンプレートによるコードサイズへの影響を正しく予測できない奴はCもダメなんで配慮の必要なし」て。
>>217
> 同等のコード
同等≠同じ、だから名前空間とかオーバーロード使ったコードはCでは通らんだろ。
その辺のみ使ってCと同等のコードを書く制約ならバイナリコード量にほぼ(名前修飾除く)影響は出ないが、
制約なく書いたら普通にそれ以外も使ってしまってサイズを膨らます要因にはなるわな。
> 一般的に言えるってことなら
thisポインタを渡す処理とか仮想関数テーブルとか名前修飾とか例外初期化とかが、ちょびっと。
そのちょびっとをケチりたいって要求は今でも8bitマイコンなら現役だと思うけど
> コードサイズを優先するならC++で書いても一番上のやつ選べばいいじゃん。
STL含め、それを全開発者に常に意識させない限りはコードが膨れるのが問題なんだよ。
一々「テンプレート(含むSTL)使用禁止」「仮想関数使用禁止」「クラス使用は最低限」
とかしないとC++採用でのバイナリコード量の増加を押さえられないのなら、
それを理由にC++自体を回避するのも十分有効な手段だろ。
C++の利点を活用できない状態でCに加えてC++ライブラリの移植の面倒まで見たいって企業は少ないだろうな。
0220デフォルトの名無しさん
2013/05/19(日) 05:47:31.70素人に使わせると糞になりがちで、
企業としてはそれをコントロールするコストを
加味するとCが無難。
名前空間、型チェック、オーバーロード
の為だけにC++を導入するメリットは少ない。
C++は規格オナニーだけにしてください。
0221デフォルトの名無しさん
2013/05/19(日) 06:33:01.93>結局、ライブラリ関数がグローバルスコープにぶち撒けられる問題はいかんともしがたいのでしょうか
如何ともしがたい。
規格は<cstdlib>がexitをグローバル名前空間に
導入されることを禁止していないし
それを抑制するための言語機能もない。
0222217(=211)
2013/05/19(日) 09:15:37.63> 制約なく書いたら普通にそれ以外も使ってしまってサイズを膨らます要因にはなるわな。
> thisポインタを渡す処理とか仮想関数テーブルとか名前修飾とか例外初期化とかが、ちょびっと。
この「ちょびっと」って数%って感じだよね?それが致命的になるレベルのコードサイズ制約を
実際に相手にしたことはないんで感覚的にはわかんないけど、あると言われれば否定はで
きないな。
> STL含め、それを全開発者に常に意識させない限りはコードが膨れるのが問題なんだよ。
そんなに制約がキツイ環境なら開発者みんな気をつければいいだろうとは思うけど、それが
簡単な話じゃない場合(人数とか資質とか)もあるのは、まぁわかる。
両方が問題になる場合にはC縛りがちょうどいいケースがあり得ることは理解したよ。ありがとう。
0223デフォルトの名無しさん
2013/05/19(日) 09:51:33.600224デフォルトの名無しさん
2013/05/19(日) 09:58:43.35お互い言いたいことしか言わずに、他人の話は基本的に否定がデフォルト設定だから。
0225デフォルトの名無しさん
2013/05/19(日) 10:11:03.18終わった話のようだが自分がグローバルにばらまくのはかまわないのか?
まあ外にさらさない実装部分なら好きにしていいというのは基本ではあるんだけど
ttp://ideone.com/6MFJV4
0226デフォルトの名無しさん
2013/05/19(日) 12:43:07.600227デフォルトの名無しさん
2013/05/19(日) 13:01:24.560228デフォルトの名無しさん
2013/05/19(日) 14:42:55.84>有益な情報なんてない
え?結構このスレ勉強になるんですけど
0229デフォルトの名無しさん
2013/05/19(日) 15:40:22.99iostreamはSTLに入るのでしょうか?
0230デフォルトの名無しさん
2013/05/19(日) 15:41:40.27皆が適当に呼んでるだけの呼称なので
どれが何に入ると決まっているわけではない
0231デフォルトの名無しさん
2013/05/19(日) 15:49:30.97この前coutとauto_ptrはSTLじゃない
と言われてえぇっと思ったので
質問させていただきました
定義は曖昧ということですね
0232デフォルトの名無しさん
2013/05/19(日) 16:08:06.24テンプレート使ってるのでSTLと呼んでも悪い事も無い
auto_ptrはC++11でdeprecatedなのでキニスンナ
0233デフォルトの名無しさん
2013/05/19(日) 16:16:06.43横だけどthreadは?
処理の多くが環境依存だから
ヘッダーだけテンプレートで
本体は.cppになると思うのだけれど
これもテンプレートライブラリでいい?
0234デフォルトの名無しさん
2013/05/19(日) 16:22:13.000235デフォルトの名無しさん
2013/05/19(日) 16:33:10.260236デフォルトの名無しさん
2013/05/19(日) 16:35:12.31あまり気にするとハゲるぞ
0237デフォルトの名無しさん
2013/05/19(日) 16:36:46.600238デフォルトの名無しさん
2013/05/19(日) 17:00:02.010239デフォルトの名無しさん
2013/05/19(日) 17:02:32.480240デフォルトの名無しさん
2013/05/19(日) 17:22:15.400241デフォルトの名無しさん
2013/05/19(日) 17:53:57.090242デフォルトの名無しさん
2013/05/19(日) 17:58:45.500243デフォルトの名無しさん
2013/05/19(日) 18:00:07.140244デフォルトの名無しさん
2013/05/19(日) 18:00:40.150245デフォルトの名無しさん
2013/05/19(日) 18:00:59.19>規格が定義され
参考までにその規格の名前を教えてください
0246デフォルトの名無しさん
2013/05/19(日) 18:01:54.11いじめるのも大概にして下さい!
0247デフォルトの名無しさん
2013/05/19(日) 18:02:09.13無毛に用はない
0248デフォルトの名無しさん
2013/05/19(日) 18:04:40.330249デフォルトの名無しさん
2013/05/19(日) 18:05:52.830250デフォルトの名無しさん
2013/05/19(日) 18:06:29.880251デフォルトの名無しさん
2013/05/19(日) 18:08:44.170252デフォルトの名無しさん
2013/05/19(日) 18:08:55.81■ このスレッドは過去ログ倉庫に格納されています