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

C++相談室 part87

■ このスレッドは過去ログ倉庫に格納されています
0001ゆとり2010/12/09(木) 19:31:20
みなさん、こんばんわ、ゆとりです。
このスレはゆとりのためのC++相談室 part87です。

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

前スレ
C++相談室 part86
http://hibari.2ch.net/test/read.cgi/tech/1288976595/

http://hibari.2ch.net/test/read.cgi/tech/1289292155/l50
このスレもよろしくね。

ついでに壁紙にしてね。
http://www.research.att.com/~bs/Bjarne.jpg
0159デフォルトの名無しさん2010/12/14(火) 23:43:40
>>155
良かったなあC++脳じゃなくて
せいぜい単価の安いJava土方でもやっててね
0160デフォルトの名無しさん2010/12/14(火) 23:44:17
>>155
職を失うのは単に本人の責任だろ^^
知識ポートフォリオは技術者なら当然なわけで。
0161デフォルトの名無しさん2010/12/14(火) 23:52:16
>>158
処理系ってVCとかのことを言うんじゃないの?
それともWindowsって答えればいいの?
0162デフォルトの名無しさん2010/12/14(火) 23:55:33
>>161
windowsプログラムで範囲チェックしたら重くなるようなプログラム書いてるってこと?
0163デフォルトの名無しさん2010/12/14(火) 23:56:05
>>142
当たり前じゃね?
配列インデックスがポインタ演算に置き換わる最適化なんて限度があるんだし、
かけ算と足し算を毎回実行してたらまずいだろ。
0164デフォルトの名無しさん2010/12/15(水) 00:00:27
>>163
それは配列をなめる時にだよね。
0165デフォルトの名無しさん2010/12/15(水) 00:01:07
>>162
そうだよ。つかVCのvectorをWindows以外で使う人はほとんどいないと思うんだが…
0166デフォルトの名無しさん2010/12/15(水) 00:39:47
>>139
語るに落ちてるぜ
おまえ自身が何ナノ秒かわからなくて言ってるんだろ?
0167デフォルトの名無しさん2010/12/15(水) 00:43:18
for(i=0;i!=v.size();++i)
{
if(v.size()<=i) return FAILED;
・・・
}
範囲チェック派ってこれに違和感感じない人ってことだよね?ちょっと頭やばくない?
0168デフォルトの名無しさん2010/12/15(水) 00:46:29
無意味な例を持ち出してきたお前の頭のやばさを疑うよ
0169デフォルトの名無しさん2010/12/15(水) 00:48:30
>>166
まわりのコードやループ回数にもよるだろうし定量的には言いにくいね。
分岐予測して仮実行してたのが当たった時の遅れだからたいしたことはないだろうけど、
5ナノ秒はかからんだろたぶん。まあ実測あるのみだね。
0170デフォルトの名無しさん2010/12/15(水) 00:56:55
>>167
ループの中でi以外のインデックスを使わないんだったらイテレータで
安全に書けるでしょ。i+4とかi-1とかの要素にアクセスするんなら
チェックがあってもおかしくないんじゃない?
0171デフォルトの名無しさん2010/12/15(水) 00:57:52
>>169
5ナノ秒を「保証」できるか?
さもなくば、おまえの論も「危険」なのか?
0172デフォルトの名無しさん2010/12/15(水) 00:59:26
>>170
おかしい
それは開発段階で排除できるミスだからリリースまでチェックを残す必要性が無い
0173デフォルトの名無しさん2010/12/15(水) 01:00:18
>>168
よくわかってるじゃないか。operator[]が範囲チェックするのは無意味なんだよ。
>>167はoperator[]が範囲チェックするってのはこれと同じことですよといっている
0174デフォルトの名無しさん2010/12/15(水) 01:01:41
>>170
vectorはランダムアクセスイテレータだからoperator[]に範囲チェックが欲しい人は
イテレータにも範囲チェック欲しいだろ
0175デフォルトの名無しさん2010/12/15(水) 01:02:33
>>173
その例じゃ無意味さを表現出来てないから頭やばいと言ってるんだけど
0176デフォルトの名無しさん2010/12/15(水) 01:03:28
boost::arrayに範囲チェックあるのはなんでなの?
0177デフォルトの名無しさん2010/12/15(水) 01:03:51
C++の仕事減っているんだが、お前らのところどう?
やっぱり、日本は低脳が超増えているから、ゆとり言語じゃなければ駄目な国に
になってきてるんだよな
0178デフォルトの名無しさん2010/12/15(水) 01:05:54
おお、盛り上がってるな。
非常に残念だが明日早いから寝るわ。
0179デフォルトの名無しさん2010/12/15(水) 01:10:18
範囲チェックしたけりゃすりゃいいがな
ライブラリに範囲チェック組み込まれたら範囲チェックしたくないときは使えないという選択しかできない
01801302010/12/15(水) 01:13:10
なんかスレがすすんでるなオイ。お前らこんな議論するより
>天ぷら引数で範囲チェックありなしのポリシーを指定するとか考えなかったのか。
にしとけばどっち派でも好きな方選べて文句無いんじゃねーの?
範囲チェック有り無しのif文なんて最適化で消えてオーバーヘッド無いだろ。
>>179
いやだからテンプレ引数で選択できるようにしたらと最初から言ってるのだが。
0181デフォルトの名無しさん2010/12/15(水) 01:14:36
「せめて」とか書くから争いの元に…
0182デフォルトの名無しさん2010/12/15(水) 01:17:16
それこそ無意味だろ
[]とatできりかえれるんだから
01831302010/12/15(水) 01:22:39
範囲チェックのオンオフでコードを壮大に修正したくはないのだが。
まあいいや。もう寝る。
0184デフォルトの名無しさん2010/12/15(水) 01:24:19
正直このへんくると微妙な議論だが
テンプレ引数で選択できるようにしたら範囲チェックするvectorと範囲チェックしないvectorは別の型になるが大丈夫か?
0185デフォルトの名無しさん2010/12/15(水) 01:25:29
ポリシーにしたほうが壮大な修正はいるわあほかwww
0186デフォルトの名無しさん2010/12/15(水) 01:29:41
規格では「未定義の動作」で FA だろ。
未定義の動作の一部として処理系が独自の条件で throw out_of_range をあてがえばいいだけのこと。
0187デフォルトの名無しさん2010/12/15(水) 01:51:56
範囲チェックを全部に入れて欲しいのか、それとも範囲チェックの有無を
簡単に切り替えたいのかイマイチ主張がわからんな

既存のソースを修正せずに範囲チェックを追加したいってことか?
0188デフォルトの名無しさん2010/12/15(水) 19:43:01
>>186
チェックしてくれるのはありがたいけど、その通知方法はabort()にして欲しいな。
リリース版であっても、いやリリース版だからこそ、
バグを検知したら即座に異常終了してデバッグ情報を残すのが誠実なプログラムだと思う。
0189デフォルトの名無しさん2010/12/15(水) 20:36:30
そういうコンテナを自前で作ればいいじゃん
0190デフォルトの名無しさん2010/12/15(水) 22:49:36
>>188
客先にJITデバッガでも入れてるのか?いきなりabortされたらデバッグ情報も残せないだろ。
サーバアプリならcatchハンドラで各変数の状況をログに残して
プロセス終了した方がいいと思うし、
GUIアプリならプログラムがabortするより丁寧なお詫び文を表示して
プログラム終了した方がユーザーの怒りが少ないだろう。
0191デフォルトの名無しさん2010/12/16(木) 20:02:19
コアダンプとかワトソン先生のような仕組みが存在する前提での話。
無ければ自分でなんとかしないとならないけど、いずれにせよ例外でロールバックされちゃかなわん。
0192デフォルトの名無しさん2010/12/16(木) 20:28:51
メモリダンプ読むなんて暇だな。その労力、別に使った方がいいと思うよ
0193デフォルトの名無しさん2010/12/16(木) 20:39:51
ダンプも読めない女子供はすっこんでろ。
0194デフォルトの名無しさん2010/12/16(木) 20:59:01
ダンプ読みは1年目の研修でみっちり叩き込まれた
アセンブラに自信があったのに甘さを思い知らされた
0195デフォルトの名無しさん2010/12/16(木) 21:00:50
Javaにした方がいいぞ。メモリダンプなんていらん。
本当にC++屋はくだらないことに努力して仕事を失っていくのが好きだな
0196デフォルトの名無しさん2010/12/16(木) 21:03:33
ここ数十年C++で仕事してるが、メモリーダンプなんか見た事無いぞ。
よっぽど効率悪い開発してるな、又は組込か?
0197デフォルトの名無しさん2010/12/16(木) 21:06:32
Windowsアプリじゃありえないよな。組み込みだろ
0198デフォルトの名無しさん2010/12/16(木) 21:12:43
Linux環境だな
0199デフォルトの名無しさん2010/12/16(木) 21:17:22
コア読む暇があったらログの強化とコードレビューに時間使った方がいいぞ。
あとはプログラムの再起動を仕込んでおけばOK
0200デフォルトの名無しさん2010/12/16(木) 21:19:37
コードレビューw
0201デフォルトの名無しさん2010/12/16(木) 22:21:47
>>195
> Javaにした方がいいぞ。
> した方がいいぞ。

「した方がいいぞ」

お前働いてないことがよく分かる一言だな。
0202デフォルトの名無しさん2010/12/16(木) 22:41:08
C++なんて糞は捨ててC#に城
0203デフォルトの名無しさん2010/12/16(木) 22:44:39
C#とか糞のかたまりでしかない
0204デフォルトの名無しさん2010/12/16(木) 22:45:40
#ifndef DEBUGWRAP_DEBUG
#define DEBUGWRAP_DEBUG
//Debug.hpp
namespace DebugWrap
{
void OutputDebugStrA(const char* pString);
void OutputDebugStrW(const wchar_t* pString);
}
#endif

//Debug.cpp
#include "DebugWrap/Debug.hpp"

#include <windows.h>

namespace DebugWrap
{
void OutputDebugStrA(const char* pString)
{
OutputDebugStringA(pString);
}
void OutputDebugStrW(const wchar_t* pString)
{
OutputDebugStringW(pString);
}
}
というのをVCで /Za(言語拡張を無効にする)オプションで
コンパイルしたところ、予期せぬ EOF が検出されました。エラーが出ます
どこがおかしいですか?この有効状態ではコンパイルが通ります
0205デフォルトの名無しさん2010/12/16(木) 22:46:43
>>204
>>8
0206デフォルトの名無しさん2010/12/16(木) 22:47:59
VB --> C# と進む人が居ても、
C++ --> C# と進む人は少ないんじゃないだろうか。
C#使うならVBでいいや。
0207デフォルトの名無しさん2010/12/16(木) 22:49:00
それはねーよ
0208デフォルトの名無しさん2010/12/16(木) 22:49:10
>>205
プリコンパイル済みヘッダは無効になっています
0209デフォルトの名無しさん2010/12/16(木) 22:57:11
日本には低脳土方しかプログラムしないのに、なんで高脳用のC++使うの
低脳用言語C#、VB使いなさいよ
0210デフォルトの名無しさん2010/12/16(木) 23:01:27
底辺派遣プログラマがいくら「俺はC#で行く」っていったところで
プロジェクトがC++使うことに決まってたらどうしようもないだろ^^
0211デフォルトの名無しさん2010/12/16(木) 23:04:46
ドカタこそ、C#やVB使わされるだろ。
0212デフォルトの名無しさん2010/12/16(木) 23:04:57
何々の言語やった方がいいとか言ってる奴は脳内プログラマ
0213デフォルトの名無しさん2010/12/16(木) 23:14:50
VB6の部署にまわされたけど、趣味でやってるC#やら.netの本を
机の上に積み上げてたら、.netの部署が忙しいらしくてそっちに
まわされることになった。
助かったよ。
0214デフォルトの名無しさん2010/12/16(木) 23:15:43
C#はツール作成用です(´・ω・`)
0215デフォルトの名無しさん2010/12/16(木) 23:39:50
C#→C++だがC++使いでオブジェクト指向を正しく理解してない馬鹿が多すぎてうんざりした。
奴らはまともなオブジェクト指向言語に触れたほうがいい。
どんどん新しい人に追い抜かれていってるぞ。
0216デフォルトの名無しさん2010/12/16(木) 23:50:23
C++はマルチパラダイムなんですよね
0217デフォルトの名無しさん2010/12/16(木) 23:51:48
C++でオブジェクト指向って馬鹿なの
C++は俺俺指向(自分で志向をあみ出す高脳用言語)なのに
自分で道(志向)を切り開けない低脳は使っちゃ駄目よ
0218デフォルトの名無しさん2010/12/16(木) 23:55:21
C++ユーザーはオブジェクト指向できないって点は否定しないんだな。
0219デフォルトの名無しさん2010/12/16(木) 23:59:26
それがゴールじゃないからな
0220デフォルトの名無しさん2010/12/17(金) 00:01:36
オブジェクト指向なんてとっくの昔に通り越してるから古い人間にはちょっとおかしく見えるんだろうね
0221デフォルトの名無しさん2010/12/17(金) 03:52:40
>>217
俺俺指向なのはまあいいけれど、たまにベターCとかいってる人がいるのはちょっとだめだと思う。
0222デフォルトの名無しさん2010/12/17(金) 16:23:01
ベターCでもぜんぜん結構
パラダイムをねちねち語る奴は仕事の出来ない奴
これ常識な
0223デフォルトの名無しさん2010/12/17(金) 16:29:03
まあ、道具だから使い方はいろいろだよね
0224デフォルトの名無しさん2010/12/17(金) 16:50:34
平日の午後4時に書かれてもね。ぜんぜんね。
0225デフォルトの名無しさん2010/12/17(金) 18:17:21
ほとんどC++の利点を用いていないC++コードを見ると悲しくなる
使われててもcout関係だけ
0226デフォルトの名無しさん2010/12/17(金) 18:30:43
coutしか使ってなければCプログラマにも理解しやすいじゃないか
それが利点でなくてなんなんだ
0227デフォルトの名無しさん2010/12/17(金) 18:40:45
むしろioはstdio派の俺
0228デフォルトの名無しさん2010/12/17(金) 18:44:19
C++屋ってどんなのを開発しているんですか?
なんとなくC/C++屋ってハードに近いのをあつかっているってイメージで、
ドライバなんかをがりがり作ってそうな感じですが
0229デフォルトの名無しさん2010/12/17(金) 18:55:37
数値解析だとか画像解析だとか、いろいろやってますが。
0230デフォルトの名無しさん2010/12/17(金) 19:16:20
通信処理とか。
0231デフォルトの名無しさん2010/12/17(金) 19:23:08
C/C++でTCP/IP通信処理か。おめでてーな。Javaの方が得意だろ。
シリアル通信だったら許す
0232デフォルトの名無しさん2010/12/17(金) 19:25:02
>>231
君の無能さを顕著に示しているよいレスだ
0233デフォルトの名無しさん2010/12/17(金) 19:38:24
フイタ
0234デフォルトの名無しさん2010/12/17(金) 20:11:57
>>225
あとコンテナだけ使ってるとかだろ
0235デフォルトの名無しさん2010/12/17(金) 20:19:27
中身全部アセンブラとかな
0236デフォルトの名無しさん2010/12/17(金) 21:07:04
Java脳の人って本当ビックリするぐらいお目出度いよな
0237デフォルトの名無しさん2010/12/18(土) 03:53:44
例外って使ってますか?
0238デフォルトの名無しさん2010/12/18(土) 05:29:15
使わないとSTL殆どだめになるじゃん
0239デフォルトの名無しさん2010/12/18(土) 11:04:17
C++を0の状態から勉強している者です。

「ロベールの入門講座」を読みながら学んでいるのですが、
p144のオーバーロードの項で詰まりました。
本の内容を見比べ、ソースを打ち込んで試しているのですが、
「関数 'double abs(double)' は既に本体を持っています。」とエラーが出ます。
(関数名を変えれば動きます)

http://codepad.org/0i4ByGfl
が自分の書いたソースです。

私はVC++2010を使用しているのですが、
「ロベールの入門書」は2008を前提として書いているようで、
そこら辺の違いもあるのでしょうか?
0240デフォルトの名無しさん2010/12/18(土) 11:06:58
>>239
死ねカス
0241デフォルトの名無しさん2010/12/18(土) 11:41:45
>>239
abs()は標準ライブラリ関数だぞ
マクロとして定義されている事もある
0242デフォルトの名無しさん2010/12/18(土) 12:24:35
>>239
標準の<cmath>にstd::absが定義されているので、それと被っている。
多分コンパイラのバージョン違いで<iostream>が<cmath>をインクルードするようになったんだろう。
対処は自分のabsを名前空間に入れる。
namespace nantoka {
int abs(int a) { if(a < 0) { return -a; } else { return a; } }
double abs(double a) { if(a < 0) { return -a; } else { return a; } }
}
勿論呼び出すときはnantoka::abs(i)とする。
まあ根本的にはそもそもusing namespaceを使わずに常に名前空間を指定して呼び出すのが常道。
0243デフォルトの名無しさん2010/12/18(土) 13:45:26
えーめんどくさいじゃーん
0244デフォルトの名無しさん2010/12/18(土) 13:51:33
この程度でめんどくさがってたらプログラム書くこと自体がめんどくさいよね
なんでプログラム書くの?
0245デフォルトの名無しさん2010/12/18(土) 13:53:28
世界中に私のプログラムを待っている子供たちがいるんです。
0246デフォルトの名無しさん2010/12/18(土) 13:54:49
居ませんよそんなハードロックな子供は
0247デフォルトの名無しさん2010/12/18(土) 13:56:37
std::
位ならいいんだけどね
orelib::utility::gui::win32::window
とか面倒じゃね
0248デフォルトの名無しさん2010/12/18(土) 13:59:06
面倒だけどちゃんと分類されてるほうが有り難い
0249デフォルトの名無しさん2010/12/18(土) 14:27:45
型なんて変数名に比べて書く回数全然少ないんだからガマンしろ
0250デフォルトの名無しさん2010/12/18(土) 14:56:25
using は仕方ないにしても
using namespace はやめれ
typedef か inline でしのげ
0251デフォルトの名無しさん2010/12/18(土) 15:04:27
ヘッダに書かなきゃどっちでもいい
0252デフォルトの名無しさん2010/12/18(土) 15:09:34
と言って数万行のソースの先頭にusing使うんですね
0253デフォルトの名無しさん2010/12/18(土) 15:17:44
それはusingより数万行の方が非難されるべきじゃね?
0254デフォルトの名無しさん2010/12/18(土) 16:46:46
っていうかさ、VCがC++ライブラリ読んでるのに
Cライブラリをstd名前空間にラップしてくれないのがおかしいんだよ^^
0255デフォルトの名無しさん2010/12/18(土) 16:55:44
互換性はジャスティス
0256デフォルトの名無しさん2010/12/18(土) 19:36:37
>>239
本ではAbsと大文字になってるでしょ
0257デフォルトの名無しさん2010/12/18(土) 20:55:34
お前ら全員ドカタだろ?

優秀なドカタと劣悪なドカタが居るのかも知れないが、
俺からみればお前ら全員所詮ドカタであって
それ以上では決して無かろう。
0258デフォルトの名無しさん2010/12/18(土) 21:13:19
遺産でほそぼそと生きてるニートなので土方ではありません
■ このスレッドは過去ログ倉庫に格納されています