トップページ⇒tech
1001コメント243KB

C++相談室 part99

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/02/21(木) 17:37:08.31
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part98
http://toro.2ch.net/test/read.cgi/tech/1347964922/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.79【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1341052801/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/
0002デフォルトの名無しさん2013/02/21(木) 17:41:26.17
>>1
スレ立て乙
こちらで頼む
まあいいけど

C++相談室 part100
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part98
http://toro.2ch.net/test/read.cgi/tech/1345823164/
C++相談室 part98(実質part99)
http://toro.2ch.net/test/read.cgi/tech/1347964922/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.82【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1359924126/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/
0003デフォルトの名無しさん2013/02/21(木) 17:42:26.88
早いけど先に地鎮祭しとくのでテンプラよろしく

STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0004デフォルトの名無しさん2013/02/21(木) 19:38:17.43
すみません早速質問です。

class Test {

public: Test getThis() { return this; }

};

のように自身を帰したい場合C++ではどのようにかくのですか?
0005デフォルトの名無しさん2013/02/21(木) 19:48:39.09
目的次第で

class Test {
public:
 Test* getThis() { return this; }
 const Test* getThis() const { return this; }

 Test& getThisRef() { return *this; }
 const Test& getThisRef() const { return *this; }
};
0006デフォルトの名無しさん2013/02/21(木) 19:54:00.83
そう言えば仮想関数で共変と反変ってのがあったな
それよりテンプラよろ
0007デフォルトの名無しさん2013/02/21(木) 20:19:28.03
ここが100スレ目?
0008デフォルトの名無しさん2013/02/21(木) 21:34:15.57
>>7
Yes
0009デフォルトの名無しさん2013/02/21(木) 22:03:02.48
初心者は回答するな
0010デフォルトの名無しさん2013/02/21(木) 22:06:44.34
>>9
あなたjavaスレにもいるでしょ?毎日張り付いてご苦労様です。
0011デフォルトの名無しさん2013/02/21(木) 22:17:24.33
>>10
Javaスレなんかいないよ
Javaは10年前にかじっただけだから全く分からないし

C++メインで使ってるからこのスレは張り付いてというか一応毎晩チェックしてる
これも張り付くっていうのかな?
まあどっちでもいいや
0012デフォルトの名無しさん2013/02/21(木) 22:17:31.36
相手が毎日張り付いてるのを確認できるのは同類だけしかいないだろうにな
0013デフォルトの名無しさん2013/02/21(木) 22:18:59.00
自分スーパーハッカーなので誰が張り付いてるか張り付いていなかくらい寝て起きる生活と同じように取得できますんで。
0014デフォルトの名無しさん2013/02/21(木) 22:19:39.21
無駄口叩くな
0015デフォルトの名無しさん2013/02/21(木) 22:22:22.11
新スレ早々荒れ模様
0016デフォルトの名無しさん2013/02/21(木) 22:35:51.87
たしか削除人は、IPアドレスがみえるそうだ
0017デフォルトの名無しさん2013/02/21(木) 22:37:27.27
またseikyou.ne.jp大暴れなのか
0018デフォルトの名無しさん2013/02/22(金) 00:19:54.15
ちょっと荒れてしまったようですみません。一応謝っておきます。
お酒を飲んでいたのと、C++がJavaのようにかけないのでイライラしてしまいました。
0019デフォルトの名無しさん2013/02/22(金) 23:37:04.06
初心者は回答するな
0020デフォルトの名無しさん2013/02/22(金) 23:39:17.58
別言語で同じように書けると思っている方がおかしい
0021デフォルトの名無しさん2013/02/23(土) 03:16:59.83
void func() {
if (i == 0) return;
i++;
}

と

void func() {
if (i == 0) {
} else {
i++;
}

ではどちらが好きですか?
0022デフォルトの名無しさん2013/02/23(土) 03:29:22.36
俺の原則はソースの行数(文字数)を減らすこと
バグの数は行数に比例する
てか、その下のやつ{}が合ってないし
0023デフォルトの名無しさん2013/02/23(土) 04:25:07.61
行数を減らす手段にカッコの位置を使うってのは斬新だな。
関数1つあたりの機能を正しく分割できていれば行数など
ふくれあがるわけないんだが。
0024デフォルトの名無しさん2013/02/23(土) 08:07:45.72
上は気持ち悪い
1行だろうが30行だろうが下で統一したい
0025デフォルトの名無しさん2013/02/23(土) 08:09:07.44
でもその場合なら
void func(){
if(i!=0){
i++
}
}
こう書くと思うな
0026デフォルトの名無しさん2013/02/23(土) 08:22:28.44
>>21
上は、最初に条件付けて関数を実行する状況を事前に制限する意図があるときに使う
下は、純粋に条件分岐する場合に使う
意図次第かと

i == 0 がいいか i != 0 がいいかも意図次第だな
0027デフォルトの名無しさん2013/02/23(土) 09:28:29.22
>>26
>上は、最初に条件付けて関数を実行する状況を事前に制限する意図があるときに使う

だね、俺もそうする。

ただ、その場合でも

void func(){
  if(i == 0){
    return;
  }
  i++;
}

だな。
0028デフォルトの名無しさん2013/02/23(土) 09:32:16.52
俺はこうだな

void func()
{
  if (i == 0) { return; }
  i++;
}
0029デフォルトの名無しさん2013/02/23(土) 12:29:14.43
空の{}入れてelseとか気持ち悪い
0030デフォルトの名無しさん2013/02/23(土) 12:38:46.18
そういう時は俺は空の { } の中にコメントを書くね
0031デフォルトの名無しさん2013/02/23(土) 12:59:05.99
途中returnを異様に避けようとする人いるよね
0032デフォルトの名無しさん2013/02/23(土) 13:09:31.53
必要なら途中でreturnしてもいいけど、このコードは普通に != 使うのが素直
0033デフォルトの名無しさん2013/02/23(土) 13:46:31.86
>>31
MISRA とかでも禁止されていたりするしね。

>>32
常にそうだと思うなら、ちょっと頭固すぎ。
0034デフォルトの名無しさん2013/02/23(土) 14:36:36.04
void func()
{
if (i != 0) i++;
}

これが一番わかりやすいじゃん
本質的に一行のコードなのになんでreturnとか出てくるの
0035デフォルトの名無しさん2013/02/23(土) 14:45:27.96
質問の意図を解さない頭の悪い回答が出始めてきたな・・・
0036デフォルトの名無しさん2013/02/23(土) 14:54:06.71
初心者は回答するな

と貼り付ける人の気持ちも分からんでも無いな
0037デフォルトの名無しさん2013/02/23(土) 14:57:45.00
どっちが好きかって聞いてるだけだからな
実用性とかそんなもの聞いてないんだよ
0038デフォルトの名無しさん2013/02/23(土) 15:04:03.92
>>36
それとこれとは違う気がするが・・・
0039デフォルトの名無しさん2013/02/23(土) 15:18:37.37
コメントとコードが近い表現になるように条件式を書いた方が良い
0040デフォルトの名無しさん2013/02/23(土) 15:21:34.61
>>33
MISRAなんてものがコーディング規約に含まれている会社の人はご愁傷様としか言いようがない
0041デフォルトの名無しさん2013/02/23(土) 15:36:37.46
条件式にコメントを合わせるのではなく
コメントに条件式を合わせる
これでコードが理解しやすくなる

そのためなら空のifがあってもいいけど
コードの書き忘れと区別できるようなコメントはあった方がいい
0042デフォルトの名無しさん2013/02/23(土) 16:00:36.52
初心者並の頭しかないくせに自覚のないゴミも回答するな














そう、今自分のことじゃないと思ったお前だよお前
0043222013/02/23(土) 17:01:23.36
>>22 だけど、本当はこうだった。

void func() {
if (i == 0) return;
i++;
}

と

void func() {
if (i == 0) {
return;
} else {
i++;
}
}

だったわ。すまんこ。
0044デフォルトの名無しさん2013/02/23(土) 17:06:01.30
やっぱ単なる好みの質問じゃんw
0045デフォルトの名無しさん2013/02/23(土) 17:42:45.34
if-else の一方だけで return; というのは個人的にはあまり良くないと思う
0046デフォルトの名無しさん2013/02/23(土) 18:49:32.78
動けばなんでもいい
0047デフォルトの名無しさん2013/02/23(土) 20:16:54.77
>>42
> そう、今自分のことじゃないと思ったお前だよお前

お前のことだと思った俺はどうすりゃいい? (w
0048デフォルトの名無しさん2013/02/23(土) 21:57:17.06
>>43
ガード条件のつもりなのか、そうでないのかをはっきりしろよ
0049デフォルトの名無しさん2013/02/23(土) 22:19:34.09
りったんしかないのならif (i != 0) ++i;でまろやかに行くよね
0050デフォルトの名無しさん2013/02/23(土) 22:52:30.62
それだとanalがムズムズするからオレは if (i==0);else ++i; かな
0051デフォルトの名無しさん2013/02/23(土) 23:27:10.80
anal は形容詞だよ
0052デフォルトの名無しさん2013/02/23(土) 23:36:04.64
英語圏でも普通に名詞的に使われてるだろ
俺は使わないけど
0053デフォルトの名無しさん2013/02/23(土) 23:41:22.52
anus っていうんだよ
0054デフォルトの名無しさん2013/02/24(日) 06:52:00.53
アヌスの鏡?w

えーと、returnの後には基本、elseは置かない習慣だから、
if (i == 0) return;
++i;
だな。
elseを書きたい場合はその前後をイーブンにしたいから、
if (i == 0) {
return;
} else {
++i;
return;
}
とするかも。
まぁ、その場合は、
if (i == 0) {
} else {
++i;
}
return;
だろうな。
0055デフォルトの名無しさん2013/02/24(日) 10:45:40.71
>>40
MISRA が規約に含まれてる会社って車業界だから、
どっちかって言うとご愁傷様とか言われるのはお前や
俺たちじゃね? (w
0056デフォルトの名無しさん2013/02/24(日) 10:50:28.03
>>55
いきなり自分の価値観を語りだすなよ
0057デフォルトの名無しさん2013/02/24(日) 10:54:08.21
iが規定値の時に触るなら
if (i != 0) ++i;
iが想定の範囲内から出ることもあるニュアンスを含めるなら
if (i == 0) return; ++i;
iの範囲によって2種の異なる処理を行うなら
if (i == 0) return; else ++i;
0058デフォルトの名無しさん2013/02/24(日) 11:13:06.30
途中returnがだめなら
throwなんてもっとだめなのか
0059デフォルトの名無しさん2013/02/24(日) 11:25:38.70
ニュアンスなんてどうでもいいからコメント書けよ
コードで伝えようとするのは危険
0060デフォルトの名無しさん2013/02/24(日) 11:33:19.91
コメント書くのは前提だろ
0061デフォルトの名無しさん2013/02/24(日) 11:40:08.40
こういう無理やり1行にしてみましたみたいなコード嫌い
0062デフォルトの名無しさん2013/02/24(日) 11:48:12.74
>>61
個人的には ; は1行に2つ以上あると気になるわ(ただしfor文を除く)
0063デフォルトの名無しさん2013/02/24(日) 11:57:45.69
普通はそう教育される
0064デフォルトの名無しさん2013/02/24(日) 12:09:46.58
そこは井手が勝手に直してくれるでしょ?w
0065デフォルトの名無しさん2013/02/24(日) 12:48:48.62
井出らっきょのことね
0066デフォルトの名無しさん2013/02/24(日) 13:05:53.92
コメントは最小限にして、それでも分かりやすいコードにして欲しい
コメント読むにはコード読むのと同等以上のエネルギーが必要
0067デフォルトの名無しさん2013/02/24(日) 13:28:05.05
日本人なら日本語マスターしてこい
0068デフォルトの名無しさん2013/02/24(日) 13:37:40.18
メンテされていないコメントほど害悪なものは無い
0069デフォルトの名無しさん2013/02/24(日) 13:41:44.83
メンテされてないコードの方が害悪だと思う
0070デフォルトの名無しさん2013/02/24(日) 13:47:57.19
>>67
えっ?コメント日本語で書いてるの?ってのは冗談として
自然言語はプログラミング言語ほど最適化されていないし、曖昧な点が多いから
0071デフォルトの名無しさん2013/02/24(日) 13:51:08.55
>>69
コメントはメンテしなくても
書いてあるコードの通りに動くからタチが悪いだろ
0072デフォルトの名無しさん2013/02/24(日) 15:02:23.29
>>56
価値観?
世間の動向とか興味ない人なの?
0073デフォルトの名無しさん2013/02/24(日) 16:31:57.13
>>72
人生相談がしたいならスレ違い
0074デフォルトの名無しさん2013/02/24(日) 16:49:39.79
すみません。うんkに毛が生えたレベルの質問なのですが、
int main()
{
return 0;
}

のreturn 0;の必要性がイマイチわからないです。あるサイトではこれがないとコパイル通らないそうですが、通りました。
例えば例外発生したときにそこでプログラムがとまってメモリを食っちゃうのを阻止する感じでしょうか
0075デフォルトの名無しさん2013/02/24(日) 16:51:13.70
C++ではなくてもコンパイルは通ります
0076デフォルトの名無しさん2013/02/24(日) 16:55:51.66
それじゃ必要になったら書けばいい
必要ないなら書く必要はない
0077デフォルトの名無しさん2013/02/24(日) 16:56:27.44
>>74 main 関数が int を返すって宣言してるから。
0078デフォルトの名無しさん2013/02/24(日) 17:02:52.70
なるほど。すみません続けて質問なのですが
using namespace std;
はできるだけ書かずにstd::cout, std::endlのように書いていったほうが良いと考えておkですか?
スタティックなインポート?に恐怖を感じます
0079デフォルトの名無しさん2013/02/24(日) 17:03:45.25
>>75
Cでも最新の仕様なら要らない
最新の仕様に対応していればだけど
0080デフォルトの名無しさん2013/02/24(日) 17:05:59.80
>>78
using namespace std; はなるべく書かない方がいい
解説書やら何かやらではスペースやら説明やらの都合上よく使われるが

こういうのなら悪くはない

namespace AAA {

using std::cout;
using std::endl;

int main() {
 cout << "aaa" << endl;
}

} // namespace AAA
0081デフォルトの名無しさん2013/02/24(日) 17:06:41.94
ヘッダにさえ書かなきゃどうでもいい
0082デフォルトの名無しさん2013/02/24(日) 17:18:28.52
>>80
そんな風にmain()関数を囲い込む方法もあるんですね。今自分で、
AAA::main();
とよんでみたら確かに通りました。
ありがとうございます。
0083デフォルトの名無しさん2013/02/24(日) 17:22:24.68
あ、すまん
main は名前空間に含んじゃいけないな
こういうことで

namespace AAA {

using std::cout;
using std::endl;

void foo() {
 cout << "aaa" << endl;
}

} // namespace AAA

int main() {
 AAA::foo();
}
0084デフォルトの名無しさん2013/02/24(日) 17:24:38.27
設計上よくないということですか?
0085デフォルトの名無しさん2013/02/24(日) 17:27:12.22
文法上まずい
mainはグローバル名前空間内で定義する必要がある

using namespace std; は色々問題があるけど
グローバルでない名前空間内で std::cout, std::endl などを個別で using するのは割と安全
というものの例を上げようとしたら
間違って main も名前空間内に入れてしまっただけ
0086デフォルトの名無しさん2013/02/24(日) 18:52:46.09
ふと思ったんだけど、なんで return で制御返しちゃうんだろ。
return だからって、制御返すのと戻り値をまじちゃってるよね。
制御構文として return を書かないなら綺麗になるかなかな?
0087デフォルトの名無しさん2013/02/24(日) 18:57:35.48
もうちょっと日本語で話してくれ
0088デフォルトの名無しさん2013/02/24(日) 19:46:09.42
>>73
価値観とか人生相談とか…
要するに論理的な話はできないと言うことね、了解した。
0089デフォルトの名無しさん2013/02/24(日) 20:14:49.91
>>58
途中returnが駄目で途中breakがOKな理由がよくわからないね、あれだ、ダブルスタンダードってやつか?
0090デフォルトの名無しさん2013/02/24(日) 20:15:41.38
>>59-60
コメントって怏々にしてメンテがゆきとどかず、実体の真逆を記述していることもおおいよね
コメントを頼りにするのは馬鹿
0091デフォルトの名無しさん2013/02/24(日) 20:26:55.91
もちろんコード前提だろ馬鹿
0092デフォルトの名無しさん2013/02/24(日) 20:41:08.08
>>88
同一人物だと思い込んだ理由はなんだろね
0093862013/02/24(日) 20:58:33.41
呼んだ関数は、いつかは(あれば)戻り値を伴って戻ってくる訳で、
そのときに戻り値が設定されてればいいわけで、
戻り値返すついでに制御も返しちゃいけないと思うんです。

スレちだけど、言い出しっぺなので。

>>21 の質問は、何らかの数が 0 なら処理しなくて良い or するなって意味で、
0 で return させたのです。
でも 0 で無いなら処理しろにして、0の場合でもそのまま関数抜けていただいたほうが、
御社にとってもとかったのではないかと。思った次第。
0094デフォルトの名無しさん2013/02/24(日) 21:04:37.71
皆さんC++学ぶ上で何をしましたか。
やってて面白い分野が見つかればよいのですが。C++ならではのAPIとかあれば教えてください。
0095デフォルトの名無しさん2013/02/24(日) 21:07:32.28
ゲーム作る
0096デフォルトの名無しさん2013/02/24(日) 21:08:19.33
科学技術計算
0097デフォルトの名無しさん2013/02/24(日) 21:09:51.57
>>95
自分もそれを第一に考えたのですがウィンドウ作る所でいやになりました。
もっとC++言語としてまとまったAPIdocumentがあればよいのにないですよね?
0098デフォルトの名無しさん2013/02/24(日) 21:10:03.73
Cライクで書かれたサンプルプログラムをC++のSTLとクラス使って書きなおす
0099デフォルトの名無しさん2013/02/24(日) 21:10:32.94
C++にウィンドウなんて概念はないからな
0100デフォルトの名無しさん2013/02/24(日) 21:14:19.77
ウィンドウなんて作らなくても
テキストベースでゲーム作ればいいじゃん
0101デフォルトの名無しさん2013/02/24(日) 21:15:04.09
可読性のために処理速度を犠牲にしてもいいですか?
■ このスレッドは過去ログ倉庫に格納されています