10/03/23 00:57:51
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
過去ログ
スレを勃てるまでもないC/C++の質問はここで
スレリンク(tech板)
スレを勃てるまでもないC/C++の質問はここで 2
スレリンク(tech板)
スレを勃てるまでもないC/C++の質問はここで 3
スレリンク(tech板)
スレを勃てるまでもないC/C++の質問はここで 4
スレリンク(tech板)
スレを勃てるまでもないC/C++の質問はここで 5
スレリンク(tech板)
スレを勃てるまでもないC/C++の質問はここで 6
スレリンク(tech板)
スレを勃てるまでもないC/C++の質問はここで 7
スレリンク(tech板)
スレを勃てるまでもないC/C++の質問はここで 8
スレリンク(tech板)
スレを勃てるまでもないC/C++の質問はここで 9
スレリンク(tech板)
スレを勃てるまでもないC/C++の質問はここで 10
スレリンク(tech板)
スレを勃てるまでもないC/C++の質問はここで 11
スレリンク(tech板)
スレを勃てるまでもないC/C++の質問はここで 12
スレリンク(tech板)
スレを勃てるまでもないC/C++の質問はここで 13
スレリンク(tech板)
2:デフォルトの名無しさん
10/03/23 02:01:15
iostreamってなんで嫌われてんの?
3:デフォルトの名無しさん
10/03/23 05:08:48
・printf, scanfでやるみたいな書式指定ができないから嫌い
・>>,<<で入力、出力というのが単に気持ち悪いから嫌い
・中身が複雑すぎて自分の頭では理解できないから嫌い
という理由はよく見かける。
ちゃんと使えば標準入出力もファイル入出力も、
あるいは圧縮・展開しながら読み書きとかいうのも
ストリームオブジェクト替えるだけでできて便利。
常に標準出力にしか書かないならprintfで十分かも。
書式指定したいときはsprintfで一度バッファに書いてから出力するか、
boost.format使うとかすればOK。
4:デフォルトの名無しさん
10/03/23 07:01:53
>>2
それはお前だけ
5:デフォルトの名無しさん
10/03/23 07:56:19
>>2
それはあなたです
6:デフォルトの名無しさん
10/03/23 09:02:11
>ストリームオブジェクト替えるだけでできて便利。
ここだろ。
大抵の場合、その恩恵授かる事が少ないから使わなくてもいいやってなる。
7:デフォルトの名無しさん
10/03/23 09:37:12
>>6
今後のために、必要条件と十分条件の違いを学習した方がいいかも
8:デフォルトの名無しさん
10/03/23 09:43:07
>>7
それはあなたです
9:デフォルトの名無しさん
10/03/23 11:45:32
「参照」に関する質問です。
Foo& const GetFoo();
この様な「宣言」は旧式って認識でおkでしょうか?
そして現在では
Foo& GetFoo();
に「簡略化」されているという認識でおkでしょうか?
10:デフォルトの名無しさん
10/03/23 12:06:00
いいえ。
11:デフォルトの名無しさん
10/03/23 12:47:11
>>9
どっちも×
12:デフォルトの名無しさん
10/03/23 13:28:12
A a;はいいのに A a();はエラーになるのはなぜですか?
13:デフォルトの名無しさん
10/03/23 13:38:28
switch(data)
{
case '+';
k = a + b;
break;
}
でビルドするとエラーになるのはなぜ?
14:デフォルトの名無しさん
10/03/23 13:43:15
;
:
15:デフォルトの名無しさん
10/03/23 13:44:14
>>13
data, a, b, k が未定義だし、mainもないし
16:デフォルトの名無しさん
10/03/23 13:46:18
>>14
ごめん よくわからない
17:デフォルトの名無しさん
10/03/23 13:47:19
>>15
全部書いたほうがいいのね
#include <stdio.h>
int main(void)
{
int a,b,data,k;
scanf("%d%d%d",&a,&data,&b);
switch(data)
{
case '+':
int k = a + b;
break:
}
printf("%d%d%d",a,data,b);
}
18:デフォルトの名無しさん
10/03/23 13:50:21
>>13と全然違うじゃねーかw
19:デフォルトの名無しさん
10/03/23 13:51:59
>>17をビルドしようとするとエラーを吐くって言いたかったんだ。。。すまん
20:12
10/03/23 13:54:56
>>19
あまりこのスレで暴れないでくれるかな。
君以外にも答えを待っている人が沢山いてだね
チャットみたいに使われるとスルーされるのだよ。
自己中をなおしたまえよ。
21:デフォルトの名無しさん
10/03/23 13:56:45
>>17
int k = a + b; → k = a + b;
break: → break;
>>13
case '+'; → case '+':
22:デフォルトの名無しさん
10/03/23 13:57:50
>>17
> #include <stdio.h>
行頭に全角スペース?が入ってる
>int k = a + b;
int は不要 → k = a + b;
>break:
break の後ろがコロンに「:」になっている、セミコロン「;」とすべき
23:デフォルトの名無しさん
10/03/23 18:21:35
このスレのテンプレートに>>23入れようぜ!
24:スレのテンプレート
10/03/23 18:22:26
姉妹スレ
C言語なら俺に聞け(入門編)Part 61
スレリンク(tech板)
C言語初心者質問総合(だいぶ過疎っているが)
スレリンク(pc2nanmin板)
C++相談室 part79
スレリンク(tech板)
【初心者歓迎】C/C++室 Ver.72【環境依存OK】
スレリンク(tech板)
C/C++小心者スレッドPart1
スレリンク(tech板)
【初心者歓迎】C/C++室 Ver.72【環境依存OK】
スレリンク(tech板)
Boost総合スレ part8
スレリンク(tech板)
Boost C++ Libraries Sandbox
スレリンク(tech板)
/******************************************************************/
codepad
URLリンク(codepad.org)
長いソースを貼るときはここへ!
/******************************************************************/
25:デフォルトの名無しさん
10/03/23 18:51:20
配布されてるライブラリを見ると希に->演算子や*演算子がオーバーロードされてたりしますが
こういうオーバーロードを行うとポインタ操作で不用意なバグを生み出しそうな気がするのですが大丈夫なのでしょうか?
26:デフォルトの名無しさん
10/03/23 19:00:25
>>25
それは作り方しだい。
配布するぐらいだからそれなりに作ってんじゃないの。
27:デフォルトの名無しさん
10/03/23 19:03:25
C++のクラスは、ヘッダに直接実装するのかソースに実装を分けるのか、どちらが良いでしょうか?
foo.h
class foo {
public:
foo() {}
void var() {
cout << "var" << endl;
}
};
----
foo.h
class foo {
public:
foo();
void var();
}
foo.cpp
foo::foo() {}
void foo::var() {
cout << "var" << endl;
}
それぞれのメリット、デメリットってありますか?
おいらはヘッダに実装しちゃうのが簡単でよいと思ってます。
28:デフォルトの名無しさん
10/03/23 19:13:45
>>27
好きにすればいいよ。
君の場合はそのヘッダーを他人に見せるわけではないだろうし、
メモリ効率とかパフォーマンスとかも気にするレベルでもなさそうだからね。
29:デフォルトの名無しさん
10/03/23 19:31:58
>>28
おいらのレベルは置いておいて、一般的な話として
メモリ効率が悪くなり、パフォーマンスも悪くなる、ってことですか?
30:デフォルトの名無しさん
10/03/23 19:39:53
>>27
クラス定義内で実装すると inline になる。
inline でいいならそれでいいけど、
そうでないものを無理にクラス定義内で実装すると
ちょっと実装を変更しただけで
そのヘッダファイルをインクルードした全てのファイルが
再コンパイルされてしまうので、
inline にするつもりがないなら .cpp で実装した方がいい。
クラステンプレートみたいに全部ヘッダで実装する必要のあるものなら
全部クラス定義内で実装しちゃってもいいと思うけど。
inline になったからって必ずインライン展開されるわけじゃないしね。
31:デフォルトの名無しさん
10/03/23 19:49:43
>>30
すごい合点がいきました。
時々空っぽ(もしくはメンバの初期化のみ)のコンストラクタだけヘッダに実装してあって
残りがソースに実装してあるコードを見るので、どういう使い分けなんだろう、と
思ってましたが、inlineになるというので氷解しました。
おいらはJava出身なので、理由がなければヘッダに実装も書きたいんだけど
クラスの設計後、実装をソースに移すようにしてみます。
32:デフォルトの名無しさん
10/03/23 20:05:36
>>30
コンパイル時間を気にするような状況なら、プリコンパイルにするはずだから、
再コンパイルとか気にしなくていい。
33:デフォルトの名無しさん
10/03/23 20:24:16
>>32
大きなプログラム扱った事無いだろ、お前
34:デフォルトの名無しさん
10/03/23 21:54:03
template使ったことないことくらい察してやれ
35:デフォルトの名無しさん
10/03/23 22:04:01
pimplパターンとか考えられるくらい
コンパイル時間て重要なのにな
partial classが欲しいわあ
36:デフォルトの名無しさん
10/03/23 22:57:36
後学のためにboostのソース眺めてたんだが
namespace detail { struct none_helper{}; }
typedef int detail::none_helper::*none_t ;
これがなにをやってるんだかよく判らないんだけどこれどういうこと?
37:デフォルトの名無しさん
10/03/23 23:10:51
>>36
他の型に自動変換されない型を定義してる。
相談室かどっかにも同じ質問あったが同じ人か?
38:デフォルトの名無しさん
10/03/23 23:35:03
>>37
関係ない人だと思う
>他の型に自動変換されない型を定義してる。
それ以前の問題で
typedef int detail::none_helper::*none_t ;という文法からして何が言いたいのか判らない状態なのです
39:デフォルトの名無しさん
10/03/24 00:11:52
これってそんなFAQだったのかw
基本的なところから。
typedef A a;
は「Aという型をaという名前でも使えるようにします」という意味。
int A::*b
は「型Aのint型のメンバ変数へのポインタ b」という意味。
両方合わせて
typedef int A::*b;
は「『型Aのint型のメンバ変数へのポインタ』の型をbという名前でも使えるようにします」となる。
メンバ変数ポインタはややこしいので使い方はぐぐってみてくれ。
とりあえず、普通のポインタと違ってNULLですら代入できないという性質がある。
このお陰で、例えば引数にNULLを渡したとしてもオーバーロードを誤判定するということがなくなる。
40:デフォルトの名無しさん
10/03/24 00:27:20
ふと思ってVCで試してみたらNULL代入できたorz
NULLも代入できないのってメンバ関数ポインタだったっけ
41:デフォルトの名無しさん
10/03/24 00:28:48
::*って違和感あるんだけど、↓で正しい?
class A { int x; int y; float z; } a;
class B { int x; int y; float z; } b;
int A::* p1 = &a.x; //OK
int B::* p2 = &b.x; //OK
int A::* p3 = &b.y; //NG
int B::* p4 = &a.y; //NG
float A::* p5 = &a.x; //NG
float A::* p6 = &a.z; //OK
なんで、A::int* ではなく int A::* なんだろう。変な感じ。
42:デフォルトの名無しさん
10/03/24 00:40:36
>>41
struct A { int x; int y; float z; } a;
struct B { int x; int y; float z; } b;
int A::* p1 = &A::x; //OK
int B::* p2 = &B::x; //OK
int A::* p3 = &B::y; //NG
int B::* p4 = &A::y; //NG
float A::* p5 = &A::x; //NG
float A::* p6 = &A::z; //OK
・ &a.xは通常のポインタが取得される、&A::xとしないとダメ
・ privateメンバのアドレスはクラス外からだと取れない
intだと分かりにくいけど、
A::B* と書いた場合「型Aのローカル型Bへのポインタ」と解釈される。
struct A{
struct B{};
};
C言語からの伝統で、「ある型の変数の定義の名前の部分を*に置き換えたもの」
がその型のポインタの型になることになっている。
例: int a→int *
int A::b→int A::*
(後者は見慣れないと思うけど、staticメンバ変数の定義のときにはこう書く)
43:デフォルトの名無しさん
10/03/24 01:05:07
なるほどねー
44:デフォルトの名無しさん
10/03/24 01:49:28
shared_ptrとunique_ptrはどう使い分けますか?
全部shared_ptrじゃ、ダメなんですか。
45:デフォルトの名無しさん
10/03/24 02:09:21
>>44
実行速度が気にならないなら全部shared_ptrで構わない。
shared_ptrを使った場合はプログラマが1個のshared_ptrからしか参照されないことを知っていたとしても
毎回参照カウンタを生成するため、そのためのオーバーヘッドが生じる。
unique_ptrは参照カウンタを使用しないため、1つからしか参照されないことが予め分かっているなら効率的。
また、shared_ptrの場合、一度ポインタをshared_ptrに格納してしまうとポインタの所有権を奪い返すことができない。
つまり参照するshared_ptrがなくなった時点でオブジェクトがdeleteされるのを止めることができない。
一方で、unique_ptrはrelease()によって所有権を放棄させることができる。
ぱっと思いつくのはこのくらい。
46:デフォルトの名無しさん
10/03/24 03:04:54
win32でピルドできる?
Google、高速・低メモリ消費の正規表現ライブラリ「RE2」を公開 ...
URLリンク(sourceforge.jp)
もし誰も挑戦してみたいの試行RE2 Windows上でコンパイルするには、パッチを歓迎するだろうなされている。
どのようにre2/re2.hの上部にあるコメントを参照してくださいRE2、使用方法に関するドキュメントしてください。
URLリンク(code.google.com)
No attempt has been made to make RE2 compile on Windows, but if anyone would like to try, patches would be welcomed.
For documentation on how to use RE2, see the comment at the top of re2/re2.h.
47:デフォルトの名無しさん
10/03/24 09:17:07
endlみたいに空の()を省きたいが、マニピュレータではない関数を作ってみたいんですけど、
分かりやすいサイトもしくはサンプルもしくは検索語無いですかね?
48:デフォルトの名無しさん
10/03/24 11:34:19
URLリンク(soudan1.biglobe.ne.jp)
この質問者ではないんだけど、やりたいこととしては
typedef unsigned int UINT;
が定義されていなければ自分で定義したい。
擬似コードとしては以下のような感じ。
#ifndef UINT
typedef unsigned int UINT;
#endif
冒頭の URL は実行時に判定しているけど(それはそれですばらしい)
やりたいのはコンパイル時です。
49:デフォルトの名無しさん
10/03/24 12:03:41
>>48
OKWaveの回答者はなにやら勘違いしているようだけど、あるかないかはエラーかどうかで判断できる。
なので、コンパイルしてみてエラーになったら定義すればいい。
逆に言えば、汎用的な手段で判定することはできないので悪足掻きするだけ無駄。
50:デフォルトの名無しさん
10/03/24 12:14:51
template<typename T=unsigned>struct mkUINT{typedef T UINT;};
#define mkUINT() typedef mkUINT<UINT>::UINT UINT;
mkUINT()
51:デフォルトの名無しさん
10/03/24 12:38:46
>>48
そこの回答だと
namespace fuga { typedef unsigned int UINT; }
using namespace fuga;
を加えるとエラーになるよね
52:デフォルトの名無しさん
10/03/24 12:43:10
>>45 誤解されがちなshared_ptrに補足
引数でshared_ptrを渡したいときは const shared_ptr<hoge>& とすればコピーのオーバーヘッドは発生しないし。
->は参照カウントと変更しないからオーバーヘッドはないよ。
new に対するshared_ptrのコストは無視できる。
まあ、大抵のshared_ptrのコストは無視できるよ。ホントにボトルネックになったときに考えればいい。
53:デフォルトの名無しさん
10/03/24 16:12:35
>>52
const でもカウントアップされないと困る場合もあると思うけど。
54:デフォルトの名無しさん
10/03/24 18:30:37
どんなとき?
55:デフォルトの名無しさん
10/03/24 18:39:48
カウントしておかないと実態が解放されちゃうことがあるよ。
これが起こるはずがないというのは本末転倒。
元々その辺の管理をやらなくていいようにするための物なんだから。
56:デフォルトの名無しさん
10/03/24 18:47:28
const参照の参照元が掴んでるから平気じゃね。
必要に応じてコピーすればいいし
57:デフォルトの名無しさん
10/03/24 18:48:23
別スレッドに渡すと死ぬる
58:デフォルトの名無しさん
10/03/24 18:50:01
スタック上にchar[sizeof]で確保した領域に
別の型のオブジェクトをplacement newするのは危険、と小耳に挟んだんだけど本当?
59:デフォルトの名無しさん
10/03/24 18:52:20
ヒープであっても危険
60:デフォルトの名無しさん
10/03/24 18:57:04
>>56
だからずーと掴んでおく必要がないのが shared_ptr でしょうに。
61:デフォルトの名無しさん
10/03/24 19:00:24
>>58
char[sizeof]を宣言してる関数から抜けたら駄目でしょう。
別に placement new だからというわけでもないと思うけど。
62:デフォルトの名無しさん
10/03/24 19:03:53
>>61
関数を抜けなければ大丈夫とお思い?
URLリンク(d.hatena.ne.jp)
63:デフォルトの名無しさん
10/03/24 19:10:12
>>61
オブジェクトのメンバにchar[sizeof]で確保されたメンバがあって、オブジェクト自体が自動変数だった場合を想定してます。
>>62
それを呼んでもどういう場合が危険でどう回避すればいいか解らないあたりc++に対する理解度が低いのかなと・・・
64:デフォルトの名無しさん
10/03/24 19:14:43
>>62
それは処理系から来る制限であり、元の仕様とは関係ない。
問題のある処理系ではそのようなコードを書かないのは当たり前のこと。
逆にメモリ管理を上書きしたいんだから、その辺のことを考慮するのは当然だろ。
65:デフォルトの名無しさん
10/03/24 19:18:46
>>63
>危険でどう回避すればいいか解らないあたりc++に対する理解度が低いのかなと・・・
わからない人が使うものではないと思いますが、使う理由は何ですか?
66:デフォルトの名無しさん
10/03/24 20:19:29
>>64
話がずれてるだろお前
67:デフォルトの名無しさん
10/03/25 09:41:55
char name[MAX_PATH] = "";
nameを\0で、埋め尽くしたい場合にどう記述すれば良いのでしょう。
68:デフォルトの名無しさん
10/03/25 10:06:16
その書き方で全部'\0'で埋まってないか?
69:デフォルトの名無しさん
10/03/25 10:19:54
>>67
最初だけで良いなら static を付けて宣言する
それか
memset(name, '\0', MAX_PATH);
で毎回クリアするとか
70:デフォルトの名無しさん
10/03/25 10:21:25
>>67
char name[MAX_PATH] = {'/0'};
71:デフォルトの名無しさん
10/03/25 10:22:05
訂正
/0じゃなくて\0ね。
72:67
10/03/25 10:41:55
初期宣言時 char name[MAX_PATH] = {'\0'};
変数クリア時 memset(name, '\0', MAX_PATH);
解決しました、ありがとうございます。
73:デフォルトの名無しさん
10/03/25 14:26:32
Modern C++ Designにpointeeって出てきたんですけどこれって何者なんですか?pointerの誤植じゃないですよね?
74:デフォルトの名無しさん
10/03/25 14:43:36
employ 【動】雇用する
employer 【名】雇用主
employee 【名】従業員
とか言うのと同じ
75:デフォルトの名無しさん
10/03/25 14:48:29
ポインタが示す先ってこと?
76:デフォルトの名無しさん
10/03/25 14:51:42
int pointee;
int *pointer = &pointee;
77:デフォルトの名無しさん
10/03/25 14:55:01
>>72
memset(name, '\0', sizeof name); の方がよくない?
78:デフォルトの名無しさん
10/03/25 14:58:42
マクロ定数で決まってる配列のサイズを、sizeofにわざわざ変える必要はない。
79:デフォルトの名無しさん
10/03/25 15:46:16
メッセージを表示させて時間が来たら消します
i= MessageBox(hwnd, Message, Title, MB_OK);
Set timer
時間経過→ SendMessage(?,WM_KEYDOWN,VK_RETURN,0);
Killtimer
SendMessageでMessageBoxにエンター入力して表示を消すつもりです。
WM_KEYDOWNにVK_RETURNを送るとエンターの入力になりますよね?
また、MessageBoxのハンドルをどうやって所得すればよいのか解りません。
80:デフォルトの名無しさん
10/03/25 15:48:39
スレチ
81:デフォルトの名無しさん
10/03/25 15:54:32
>>79
MessageBox 使わず、自分で CreateDialog すればいいじゃん。
SendMessage は控えよう!
82:79
10/03/25 16:18:07
API向けのスレでした…すみません。
CreateDialogも調べてみます。
83:デフォルトの名無しさん
10/03/25 16:47:35
>>74,76
thxです
84:デフォルトの名無しさん
10/03/25 21:32:49
カンマ区切りの文字列sがあったとして
foo(strtok(s, ","), strtok(NULL, ","), strtok(NULL, ","));
なんて呼び出しをしたいんだけど、strtok は第一引数の場所から
順番に呼び出されるって保証がありますか?
85:デフォルトの名無しさん
10/03/25 21:34:34
無い
86:デフォルトの名無しさん
10/03/25 21:34:40
ない
87:デフォルトの名無しさん
10/03/25 21:36:03
ない
実際の実装ではむしろ逆から呼ばれる傾向にある
(後ろの引数からスタックに詰むため)
これも必ずそうというわけではないが
88:デフォルトの名無しさん
10/03/25 21:40:22
>>85-87
面倒でもいったん変数に取り出す必要があるんですね。
どうもです。
89:デフォルトの名無しさん
10/03/25 23:37:22
fopen("1.txt",fp)後に while (fgets(s, 256, fp) != NULL) {Line++}で行数を読み込みます。
Lineが100あり、30行目の内容を読み込みたい時ですが、
int a=30,Line=0;
while (fgets(s, 256, fp) != NULL) {
Line++
if(Line=a) 適当な関数(s);
}
上の記述だと1~30まで繰り返しますが、ダイレクトに30行目を読み込む方法ってあります?
for()
90:デフォルトの名無しさん
10/03/26 00:30:22
1行の長さが不定なら前から見ていくしかないよ
91:デフォルトの名無しさん
10/03/26 02:40:50
BOOLEAN BOOL boolean bool
どれ使えばいいの?(´;ω;`)
92:デフォルトの名無しさん
10/03/26 03:06:31
BOOLかbool
93:デフォルトの名無しさん
10/03/26 06:25:42
ありがとう
94:デフォルトの名無しさん
10/03/26 10:41:27
>>89
そのソースだと全行で関数が呼び出されるぜw
95:デフォルトの名無しさん
10/03/26 10:45:48
algorithmのstd::remove()について質問です。
std::vector<int> v;
v.push_back(0);
v.push_back(1);
v.push_back(2);
std::remove(v.begin(), v.end(), 0);
std::remove(v.begin(), v.end(), 1);
printf("%d", v.size());
上記のようにすると、最後のvのサイズは1を期待するのですが3のままです。
でも、v[0]には本来の0ではなく2が入っています。
v[1]もv[2]も2が入っています。
std::remove()の代わりにvector::erase()を使用すれば、
v.size()は1を返します。
std::remove()はそういうモノなのでしょうか?
VC2008で確認しています。
96:デフォルトの名無しさん
10/03/26 10:55:20
>>95
そうです
期待通りの動作をさせるには
v.erase(std::remove(v.begin(), v.end(), std::compose2(
std::logical_or<bool>(),
std::bind2nd(std::equal_to<int>, 0),
std::bind2nd(std::equal_to<int>, 1)))
とする必要があります
97:デフォルトの名無しさん
10/03/26 10:57:09
あ、ごめん
v.erase(std::remove(v.begin(), v.end(), std::compose2(
std::logical_or<bool>(),
std::bind2nd(std::equal_to<int>, 0),
std::bind2nd(std::equal_to<int>, 1)),
v.end())
だった
removeは残す要素の候補を前に集めるだけで、実際の削除は
しませんのでstd::eraseもしくはメンバ関数eraseを使います
98:デフォルトの名無しさん
10/03/26 11:18:20
>>97
erase 使うのならそんな面倒なことせず
remove を erase に置き換えれば良いだけだと思うけど。
99:デフォルトの名無しさん
10/03/26 11:56:46
v.erase(std::remove(v.begin(), v.end(), 0), v.end());
v.erase(std::remove(v.begin(), v.end(), 1), v.end());
これでいいね
removeは第三引数にリファレンスを取るのでlogical_orが使えないな
100:デフォルトの名無しさん
10/03/26 12:00:18
使うとしたらremove_ifとboost::bindを組み合わせるかだ
101:デフォルトの名無しさん
10/03/26 12:05:16
やっと動いた
これは読みにくいわ(^ω^;)
v.erase(
std::remove_if(v.begin(), v.end(),
boost::bind(
std::logical_or<bool>(),
boost::bind(std::equal_to<int>(), _1, 0),
boost::bind(std::equal_to<int>(), _1, 1)
)
),
v.end());
102:デフォルトの名無しさん
10/03/26 12:08:36
ちなみにboost::bindを使ったのは、標準C++にはstd::compose2が無いためです
103:デフォルトの名無しさん
10/03/26 15:02:28
質問は
>std::remove()はそういうモノなのでしょうか?
であって、そういう汚いコードに興味はありません。
104:デフォルトの名無しさん
10/03/26 16:54:30
boost使ったからまだ綺麗なんだぞ
もっと汚いコードは山ほど書いてきた
105:デフォルトの名無しさん
10/03/26 17:12:19
>>104
だから、コード書いてくれなんて誰も頼んでないつーの。
オナニーはよそでやってくれ
106:デフォルトの名無しさん
10/03/26 17:23:03
ときどき void main って書くやついるよね。
なんなんだろうね。馬鹿じゃないかと思うよね。
107:デフォルトの名無しさん
10/03/26 17:28:36
まともな事には答えられないからって、同じ話題をループさせようとすんなよw
108:デフォルトの名無しさん
10/03/26 17:46:36
オブジェクト(インスタンス)を生成するときに変数をポインタにするのとしない場合が
ある理由を教えてくださいませませ
Unko* unko_kusai
Chinko chinko_1
109:デフォルトの名無しさん
10/03/26 17:51:11
>>108
生成パターンを使うと大抵ポインタにならないか?
それから仮想関数で使う場合もポインタにしなければならない
110:デフォルトの名無しさん
10/03/26 18:04:49
別に参照でもいいよ
111:デフォルトの名無しさん
10/03/26 18:06:33
>>108
変数にすると、生存期間をコントロールできない。
ポインタなら自由にコントールできる。
けど自由な分手間もかかるし、プログラマが責任を持つ必要がでてくる。
112:デフォルトの名無しさん
10/03/26 18:08:00
>110
仮想関数の場合な
使う場面は限られるけど
生成パターンでもシングルトンだと参照の場合もあるし
113:デフォルトの名無しさん
10/03/26 18:16:56
Hoge hoge;
{
HogeBase &h = hoge; h.vfunc();
}
ポインタじゃなくてもvtable参照してくれますよ
114:デフォルトの名無しさん
10/03/26 20:12:27
>>113
知ってるから
わざわざ書かなくてよろしい
115:108
10/03/26 23:44:05
レスありがとうございます
今勉強してるサンプルプログラムでポインタあ・なしの両方が出てきて、何故に使い
分けてるのか疑問だったのですが、一方は複雑なことやる必要があるからポインタ、
もう一方はその必要が無いなら安全なポインタ無し という風に使い分けてるという解釈で
おkですかね?
116:デフォルトの名無しさん
10/03/26 23:46:46
>>115
自動で済ませられるなら自動に任せるって琴田
117:デフォルトの名無しさん
10/03/27 00:57:48
>>99
初回のremove()の結果を二回目のremove()の第二引き数とすればerase()は一回でいいんじゃね?
>>101
だとすればわざわざそんなややこしいbind()するメリットもないんじゃね?
118:デフォルトの名無しさん
10/03/27 01:46:00
>>115
メモリリークするバグを潰すのは大変だ。と前置きをした上で。
ポインタにしなかった場合、その変数のスコープから抜けるときに
変数の後始末を自動でやってくれる。つまりメモリリークの心配がない。
これは色々処理をする途中で、エラーが発生したら中断、みたいな処理をするときにはとても楽。
ポインタを使った場合、中断するときにnewしたオブジェクトを正しく全てdeleteしないと
メモリリークになるのでよく注意する必要がある。
一方で、>>109の言うようにオブジェクトの生存期間を自分で管理したい場合や、
継承を使ったオブジェクトを使いたい場合、
もしくは大きなオブジェクト(大きな配列など)はポインタを使う必要がある。
C++であれば、ポインタでありながら、メモリリークの心配がいらないスマートポインタという
仕組みがよく使われる。(boost::shared_ptrなど)
これを使うと普通のポインタよりも実行速度がやや遅くなるが、普通は気にするほどではない。
119:デフォルトの名無しさん
10/03/27 01:54:03
速度気にならなければ、動的メモリ確保をすべて乗っ取って
ガベージコレクションした方が良い。
ヘッダ変更だけで済む
120:デフォルトの名無しさん
10/03/27 01:55:54
はじめからnewを使わないという戦略もある
STLをうまく使えば、スマートポインタ、ガベージコレクション、new
はほとんどいらんだろう。
121:デフォルトの名無しさん
10/03/27 05:50:38
>>117
>初回のremove()の結果を二回目のremove()の第二引き数とすればerase()は一回でいいんじゃね?
アホ
removeの戻り値は削除候補の先頭だ
前に集められた候補の中に次に削除したい値が含まれているので
その方法はダメ
>だとすればわざわざそんなややこしいbind()するメリットもないんじゃね?
だったらお前が何か書いて見せろや
口だけ出して何もしない奴が一番嫌いだな
122:デフォルトの名無しさん
10/03/27 08:34:09
>>121
間抜けで頓馬で馬鹿と来ちゃ、どうしようもないな。
・間抜け
削除候補が集められるのは前じゃなくて後ろだよ。
つまり、「後ろに集められた削除候補の先頭」が戻されるって訳。
・頓馬
自分で確認すれば間違いに気付けたのにそれさえしないんだからな。
・馬鹿
その上、何か書いて見せろって自分が書けもしないのによく言うよ。
馬脚を現わした挙句に自ら墓穴を掘ったわけだ。
123:デフォルトの名無しさん
10/03/27 08:43:16
>>122
間抜けのアホはお前だ
>削除候補が集められるのは前じゃなくて後ろだよ。
>つまり、「後ろに集められた削除候補の先頭」が戻されるって訳。
そんなもん常識だろ
>>121のどこにこれを否定するような文が書いてある?
>>117の通りにしたら1が削除されずに残ってしまうだろ
実行して試してみ
それとも図星を突かれて悔しくてファビョったのか?
124:デフォルトの名無しさん
10/03/27 08:52:48
二人とも言い合いせずに特に>>122はプログラム例を書いて示せ
お前さんの言いたい事はこういう事だろ?
std::vector<int> v;
v.push_back(0);
v.push_back(1);
v.push_back(2);
v.erase(std::remove(v.begin(), std::remove(v.begin(), v.end(), 0), 1), v.end());
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
std::printf("%d", v.size());
125:デフォルトの名無しさん
10/03/27 09:35:13
>前に集められた候補の中に
126:デフォルトの名無しさん
10/03/27 09:38:05
>>125
合ってるじゃないか
前に集められた「削除から外される」候補の中にと文脈からは取れるだろ
>前に集められた候補の中に次に削除したい値が含まれているので
これをよく読め
127:デフォルトの名無しさん
10/03/27 09:39:47
要するに>>122はイチャモン付けて喧嘩したいだけなんだよ
相手が誰であろうと構わないわけだ
だったら痛くも痒くもないネット内でのビビリ喧嘩などせずに
街に出てDQNに喧嘩吹っ掛けてボコボコに殴られてこい
128:122
10/03/27 09:51:16
んじゃ、>123のために私の書いたのを貼っておく。
まぁ、>124と核は同じだね。
--
#include <algorithm>
#include <cstdio>
#include <vector>
int main()
{
std::vector<int> v;
v.push_back(0);
v.push_back(1);
v.push_back(2);
for (int ic = 0; ic < 10; ++ic) {
v.push_back(ic % 5);
}
v.erase(std::remove(v.begin(), std::remove(v.begin(), v.end(), 0), 1), v
.end());
for (std::vector<int>::const_iterator it = v.begin(); it != v.end(); ++i
t) {
printf("%d\n", * it);
}
return 0;
}
--
それはさて。
>>>121のどこにこれを否定するような文が書いてある?
>121には「前に集められた候補」とあるんだけどな。
まぁ、「削除候補とは書いてない」と言い出すだろうからまぁいいや。
129:122
10/03/27 09:59:35
うぉっ、80カラムでぶった切れているから難癖つけられる前に問題の行だけ再掲。
--
v.erase(std::remove(v.begin(), std::remove(v.begin(), v.end(), 0), 1), v.end());
for (std::vector<int>::const_iterator it = v.begin(); it != v.end(); ++it) {
--
つーか、書いている間に予想通りのレスがついてて笑えた。
無茶しやがって……
130:デフォルトの名無しさん
10/03/27 10:00:31
>>128
>>126
お前の目はフシアナだ
131:デフォルトの名無しさん
10/03/27 10:44:25
>>126
>removeの戻り値は削除候補の先頭だ
>前に集められた候補の中に次に削除したい値が含まれているので
一行前に削除候補って書いてあるのに、次の行の候補が「削除から外される」候補と
読むのはかなり無理がある
132:デフォルトの名無しさん
10/03/27 10:48:56
>>131
お前の頭が悪いからだ
その分だとプログラムもバグだらけだろう
133:デフォルトの名無しさん
10/03/27 11:00:02
>>132
いい加減見苦しい。
説明が下手か勘違いしていたのかは詳らかではないが、
そもそも>117で巧くいくことははっきりしている。
他人を嫌う前に、ご自身の言動を見直してみては如何?
134:デフォルトの名無しさん
10/03/27 11:03:36
>>133
見苦しいのはお前の方
こちらの説明が間違ってないのに間違って言い張るお前は馬鹿
135:デフォルトの名無しさん
10/03/27 11:08:20
>>120
STLをうまく使うにはスマポは必須だけどね。
スマポでもshared_ptrならmake_sharedを使えばnewもいらず例外安全性も確保されるようになるし。
STL+shared_ptrでnewもガベコレもいらなくなるね。
136:デフォルトの名無しさん
10/03/27 11:11:45
>>117はせっかっく良いことをいったのに、挑発レスを受け流せずに台無しだ。
137:デフォルトの名無しさん
10/03/27 11:13:16
>>117は単純馬鹿だからな
この分だと仕事場でも>>117は同僚とぶつかってばかりだろう
138:デフォルトの名無しさん
10/03/27 11:18:35
>>121
> その方法はダメ
見苦しい弁解まだ~w
139:デフォルトの名無しさん
10/03/27 11:31:30
的外れな突っ込みをするバカが一番悪いだろw
140:デフォルトの名無しさん
10/03/27 11:33:44
>>99
これで単純明快なのにケチを付ける奴が一番悪い
141:115
10/03/27 12:05:39
皆様詳しいレスありがとうございました。
色々まだ自分の知らないワードが出てきたのでググって勉強しますぉ。
142:デフォルトの名無しさん
10/03/27 21:51:58
SetTimerでタイムアウト後、タイマのプロシージャの中でKillTimerしても良いんでしょうか?
プロシージャ外じゃないと駄目なんて事は
143:デフォルトの名無しさん
10/03/27 22:13:10
>>142
なんのSetTimer?
Win32ならWin32スレで聞くと詳しいぞ
144:142
10/03/27 22:21:24
SetTimerはWin32でした、すみません。
145:デフォルトの名無しさん
10/03/27 23:14:51
gnuplotでリアルタイム解析をするクラスを作りたいんだけど参考になるものなにかありますか?
146:デフォルトの名無しさん
10/03/27 23:16:26
なんのリアルタイムかわからん
アクセス解析か
147:デフォルトの名無しさん
10/03/27 23:22:33
物理の数値計算です
3次元での粒子の位置などを見ます
148:デフォルトの名無しさん
10/03/27 23:37:52
gnuplotは表示ツールであって解析ソフトではないと思うが。
一応「gnuplot C++」あたりでググればそれっぽいページは出てくるな。
だが、もう少し本当にやりたいことは何なのか考えてみた方がいいと思う
149:デフォルトの名無しさん
10/03/27 23:49:26
>>147
解析を行いたいのか、解析データはあるからプロットだけしたいのか?による。
150:デフォルトの名無しさん
10/03/28 00:13:05
パイプ開いてコマンドを出力すればリアルタイムに描画してくれるよ
ただ糞遅いから結局のところ違う描画ライブラリ使うことになるだろうけど
151:デフォルトの名無しさん
10/03/28 01:02:21
>>149
後者です
>>150
別にいいのがあるならどんなのがあるか教えてもらえるとありがたいです
152:デフォルトの名無しさん
10/03/28 01:11:06
URLリンク(home.f08.itscom.net)
ここの5.8章みたいなことがしたいということです
説明下手ですいません
153:デフォルトの名無しさん
10/03/28 16:23:54
C++とJavaの両方を勉強する意味ってありますか?何か範囲がかぶってる気がしまして。
154:デフォルトの名無しさん
10/03/28 16:36:05
>>153
英語とフランス語の両方を勉強する意味ってありますか?
155:デフォルトの名無しさん
10/03/28 16:38:14
意味はあるに決まってるが、
一方を勉強したらもう一方を勉強するのはかなり楽
156:デフォルトの名無しさん
10/03/28 17:07:03
英語とフランス語というより
英語とドイツ語ってぐらいか
157:デフォルトの名無しさん
10/03/28 17:14:29
スペイン語とポルトガル語くらいじゃないか
158:デフォルトの名無しさん
10/03/28 17:15:44
例えが分かりにくくないかw
要するにどっちも覚えたら最強ってことだ
159:デフォルトの名無しさん
10/03/28 22:16:31
>>153
> C++とJavaの両方を勉強する意味ってありますか?何か範囲がかぶってる気がしまして。
仕事がかぶってないからいいんじゃね?
160:デフォルトの名無しさん
10/03/28 23:47:57
両方覚えてようやく半人前だと思うぞ。
161:デフォルトの名無しさん
10/03/28 23:53:23
>>153
C++を学べばjavaもc#も軽い軽い
162:デフォルトの名無しさん
10/03/28 23:55:26
いや重いよ
163:デフォルトの名無しさん
10/03/29 00:25:58
64bit PCでのドライバの操作を含むアプリを開発する場合。
32bitビルドのアプリ(wow64で動作)と64bitドライバの組み合わせで動作させることは可能でしょうか?
DeviceIoControlなどのドライバとのIOなど、その他動作面で問題ないでしょうか?
164:デフォルトの名無しさん
10/03/29 00:52:16
VisualStudio2008でビルド後にVMware内で起動させてデバッグするにはどうすればよいでしょうか?
できればF5キー一発ぐらい自動的な方法でお願いします
165:デフォルトの名無しさん
10/03/29 08:55:43
>>163
どちらも作り方しだいです。
>>164
VMware 内で VS を動かしてください。
166:デフォルトの名無しさん
10/03/29 10:00:54
>>162
少しワロタ
167:デフォルトの名無しさん
10/03/29 16:00:33
>>153
並行して設計できるようにならないと無意味
168:デフォルトの名無しさん
10/03/29 16:01:03
訂正:設計できるように→設計もできるように
169:デフォルトの名無しさん
10/03/29 16:45:38
>>165
すみませんが実機でビルドしてVMwareにロードさせる方法を教えてください
170:デフォルトの名無しさん
10/03/29 17:09:24
実機でビルドしたならそのまま動かせばいいだろ。
開発機でビルドしたというなら話は別だが。
171:デフォルトの名無しさん
10/03/29 17:15:52
>>169
逆に普段どうやってるんだ?
隣のPCで動かすのと同じだろ。
172:デフォルトの名無しさん
10/03/29 17:34:38
プロジェクトフォルダごとDVCSのリポジトリにコミットして
VMWare上の環境でそれをcheckout
173:デフォルトの名無しさん
10/03/29 18:28:51
それを自動化すればいいじゃん。
174:デフォルトの名無しさん
10/03/30 14:27:00
public継承する場合、派生クラスは基底クラスについてよく知っていると考えておk?
175:デフォルトの名無しさん
10/03/30 14:35:56
ある右辺を有する配列の番号?を得るにはどうしたらいいでしょうか?
例えば配列int x[3]の3つの要素がそれぞれ
1,3,5であるが、どのx[]がそれぞれ1,3,5を有するかわからない場合に、
maxたる5を有するx[?]の?を出力したいのです。
特に、これの2次元配列版の出力方法を教えていただきたいのですが
176:デフォルトの名無しさん
10/03/30 14:37:25
普通に検索する
177:デフォルトの名無しさん
10/03/30 16:35:35
配列の要素数がそんなに大きくなければ、for文で先頭から探せばいいんでねーがな。
178:デフォルトの名無しさん
10/03/30 16:45:18
ユニークなら格納方法を変える
ユニークで無いなら考察無意味
179:デフォルトの名無しさん
10/03/30 17:19:02
>>174
よくではなく、ある程度知っていればOK。
180:デフォルトの名無しさん
10/03/30 22:58:55
#include "a.h"
と書いた場合
・そのファイルと同じディレクトリのa.h
・コンパイルしたディレクトリのa.h
のどっちが選ばれるのかは決まってますか?
181:デフォルトの名無しさん
10/03/30 23:10:50
未規定
182:デフォルトの名無しさん
10/03/31 01:32:58
>>180
サーチパスの優先順位の高い方
183:デフォルトの名無しさん
10/03/31 02:05:31
C++どれくらいで基本身につきますか?
ちなみに今中学生です
184:デフォルトの名無しさん
10/03/31 02:58:10
perl出身なんだだけど、どうもCが無意味にめんどいように感じてしかたありません。
一言で言うと、制限とか宣言とか制約とか多すぎます。今、1変数1バイトの所まで知ってやる気がなくなってきました。
例えばですけど、こんなふうに処理が書きたいです
my %fanc = (
'fanc_a' => sub{ なんか処理 },
'fanc_b' => sub{ なんか処理 },
)
my @fanc = ('fanc_a', '引数'); #これ外部から取り入れた文字列
my $code = '??'; #これも外部から取り入れた何かのコード
$code =~ s/(変換しますお)/$fanc{"$fanc[0]"}->($fanc[1], $1);/eg;
完全に頭の中がperlに支配されてるんです。perlしかできないから。
Cを始めた理由は「exeなGUIを作りたかった」ってだけなんですが、もしかしてC以外を覚えたほうがいいでしょうか?
なんでもいいからなんかお勧めしたり、Cを肯定したり、助言したり、こんな情報みれやとURLを貼ったりしてほしいです。
どうすればいいのか全てを見失ってきそうです。
185:デフォルトの名無しさん
10/03/31 03:05:47
perl windows gui の検索結果
URLリンク(www.google.co.jp)
186:デフォルトの名無しさん
10/03/31 03:17:46
>>183
人によるとしか。すぐできる奴もいれば10年かけてもダメな奴もいる。
数学・英語・料理・ゴルフ・・・なんでも同じだな。
187:デフォルトの名無しさん
10/03/31 03:19:19
ありがとうございます。
でもperlをexeにしたら、一通りやりましたが何を使ってもバグるんです。
警告なしで関数が動かずにスルーされてたりするんです。ひどいですよね。
188:デフォルトの名無しさん
10/03/31 03:20:26
ずっとperlだけをやるのが一番いいだろ。
189:デフォルトの名無しさん
10/03/31 03:28:50
perlが得意ならそのライブラリのソース読んで自作すればいいんじゃないのかな?
もしくは修正する。
結局、言語部分でしっくりきてないようだけどさ、
どちらにしてもWindowsAPI(exeなgui)などの知識が別途必要になってくる訳だし。
190:デフォルトの名無しさん
10/03/31 03:39:22
Cの方が文法がシンプルで低級高速でバグが見つけやすくて綺麗に書けます
191:デフォルトの名無しさん
10/03/31 05:46:09
>>180
一般的には前者。
>>182
それは不等号で括った場合じゃないのか?
192:デフォルトの名無しさん
10/03/31 08:48:16
>>184
C#がおすすめ
193:デフォルトの名無しさん
10/03/31 17:03:26
C++で簡単なゲーム作るのに初心者向けの本ぐらいの知識があれば出来ますか?
やっぱりwindowsAPIの知識だとか必要
194:デフォルトの名無しさん
10/03/31 17:13:43
>>190
嘘付けアホ
泥沼化したらまずバグを見つける事は不可能に近いぞ
195:デフォルトの名無しさん
10/03/31 17:15:55
プログラムの中のプログラムを書く場合にプログラムの中のプログラムの文がStringだと
処理が重いので
どうやればいいですか?
アイディアが浮かびません。
本とかに乗ってるやり方教えてください。
196:デフォルトの名無しさん
10/03/31 17:23:01
勃起するまでもないまで読んだ
197:デフォルトの名無しさん
10/03/31 17:45:01
>>195
質問の意味が全然わからねぇ。
プログラムの中のプログラムってどういう意味だ?
198:デフォルトの名無しさん
10/03/31 18:01:03
デザインパターンのインタープリターパターンみたいなやつです。
199:デフォルトの名無しさん
10/03/31 18:03:56
構文解析木/抽象構文木というのを作って、それを元に処理する
200:デフォルトの名無しさん
10/03/31 18:08:25
意訳
関数中で文字列操作をするのだがStringクラスを使うと遅い
これを改善する方法はないだろうか?
私は馬鹿だ
信頼性のある方法を教えろ
201:デフォルトの名無しさん
10/03/31 18:14:16
>>199
なるほど、パーサーがパースした物を初めから作れということですね。
しかし構文解析木の接点はstringじゃないんですか?
>>200
一行目が違います。
202:184
10/03/31 18:54:50
ありがとうざいます。
他のスレとか見ても、言語に俺のようないちゃもん付けてる人いないので、
どうも俺の脳みその構造が間違ってたみたいです。
少し頭の構造を作り変えるべく勉強してまいります。
ありがとございました。
203:デフォルトの名無しさん
10/03/31 19:00:41
>>202
C言語はまだマシだがC++は発狂する難しさだから
今のうちに別言語のほうがいいんじゃない?
exeでさえ良ければrubyならexerbとかあったような気がするから
perlでもあるでしょ。
204:デフォルトの名無しさん
10/03/31 20:24:48
stringクラスの使い方が悪いから遅いってこともあるかと
205:デフォルトの名無しさん
10/03/31 23:37:54
>>203
C++ってそんなに難しいの?
独学では無理なレベル?
206:デフォルトの名無しさん
10/03/31 23:42:08
>>205
> 独学では無理なレベル?
俺は趣味プログラマでC++を独学でやっているが、
実装の都合をユーザーに押しつけるような代物。
バッドノウハウと「奥が深い症候群」
URLリンク(0xcc.net)
これを地でいくC++は、ホント好きor仕事じゃないと
やってらんないと思う。
207:デフォルトの名無しさん
10/03/31 23:57:14
>>206
Cから移行しようかとおもってたんだが何か難しそうですね。
取り合えず全部の機能を使おうとするんじゃなくてbetter Cとして練習してみます。ありがとう
208:デフォルトの名無しさん
10/04/01 00:04:24
>>207
> 取り合えず全部の機能を使おうとするんじゃなくてbetter Cとして練習してみます。
うん、それが正解だと思うよ。
難しいの使ってる俺SUGEEE
ってなれる性格じゃないとちょっと嫌になりかねないし。
209:デフォルトの名無しさん
10/04/01 00:27:29
C++は昔からいいところもあれば悪いところも多いって位置付けだったのに、
最近はC++を本気で絶賛してる子が増えてる気がする
怖いね
210:デフォルトの名無しさん
10/04/01 00:31:22
統計とってから増えてるとか言えよカス
てめーの感覚なんざ誰も信用しねぇよ
211:デフォルトの名無しさん
10/04/01 01:05:56
マジレスすると、Cでも面倒だと感じるなら、C++から手を出すなんてやめとけ
C#→C→better CとしてのC++の順にやり、その上で、必要であればC++をやれ
212:デフォルトの名無しさん
10/04/01 01:13:06
C++よりCで作る方が面倒だって
入門書の例題レベルなら話は別だろうけど
213:デフォルトの名無しさん
10/04/01 01:28:05
>>212
そういう意味で言ったんじゃないんだけどな
214:デフォルトの名無しさん
10/04/01 03:50:26
ほんとC++はbeter Cがいいよ。
215:デフォルトの名無しさん
10/04/01 03:59:07
URLリンク(www.nicovideo.jp)
こんな感じでゲームが作りたいです。
どうしたらこんな感じで作れるようになりますでしょうか?
参考書でも良いのでアドバイスお願いいたします。
216:デフォルトの名無しさん
10/04/01 08:58:35
>>215
春休み中に作るのは不可能。
217:デフォルトの名無しさん
10/04/01 09:20:10
pimpl等 動的に確保したオブジェクトへのポインタをクラスのメンバとして持つ場合、
普通の生ポインタではなくスマポを使うようにといわれています。
深いコピーを想定しているため共有する必要はないので、必ずしもshared_ptrである必要はありません。
この場合は実際,
std::shared_ptr(まだ標準でない)
std::unique_ptr(まだ標準でない)
std::auto_ptr(標準)
boost::shared_ptr(boostが入っていない環境では使えない;準標準)
boost::scoped_ptr(boostが入っていない環境では使えない;準標準)
と5通りほど考えられると思うのですが
普遍性、速度などの面でどのスマポがいいのでしょうか。
よろしくお願いします。
218:デフォルトの名無しさん
10/04/01 11:14:29
その場合は生ポで十分
219:デフォルトの名無しさん
10/04/01 15:15:46
>>217
>普通の生ポインタではなくスマポを使うようにといわれています。
どういう理由でスマートポインタが必要なんだ?
それががわからないのに選択できるわけがない。
そういう言った本人にお伺いを立てる方が100倍速いわ。
220:デフォルトの名無しさん
10/04/01 15:22:20
何でもかんでもスマポスマポ言う奴は雑魚
221:デフォルトの名無しさん
10/04/01 15:59:34
>>220
まあお前が雑魚なんだけどな
222:デフォルトの名無しさん
10/04/01 16:05:40
>>221
雑魚乙でありますwwwwwww
223:デフォルトの名無しさん
10/04/01 16:23:50
まぁ雑魚は大概複数で群がっている
224:デフォルトの名無しさん
10/04/01 19:59:07
>>217
shared_ptrをpimplで使うのは、不明な型を安全にdeleteできるメリットがある。この理由のためだけにpimplで使っても良いよ。
pimplの為に使うのであれば、shared_ptrの複製を作らない可能性が高く他の方式と速度の差は殆ど無い。
225:デフォルトの名無しさん
10/04/01 20:41:32
>>218-217
動的に確保したオブジェクトへのポインタをクラスのメンバとして持つ場合、
スマートポインタを用いるのが間違いが起こりづらく可読性も高いという
コンセンサスがC++界にはあるのかと思っております。
>>224
動的削除子により不完全型を持てるというやつですね。
226:デフォルトの名無しさん
10/04/01 21:59:41
スマートポインタ好きもそうでないのもいると思うが、
あれ可読性は高くないだろ?
見た目はかなり汚い
227:デフォルトの名無しさん
10/04/01 22:02:05
>>226
一目でスマポと分かるし
228:デフォルトの名無しさん
10/04/01 22:12:15
まじめにCをやることになって VC++2008を入れたら、すっげーめんどくさいことになりました。
今まではサクラエディタとか秀丸とかそんなのを使ってて、ALT+Z を押したら編集中のコードがそのままexeになって勝手に保存されてる仕組みでした。
と言うかプロジェクトってなんですか?
統合環境とやらは使ったほうがいいんですか?
使ったほうがいいなら、VC++2008のサイト教えてもらえないでしょうか?(検索したら記述のサイトばっかり出てくる)
229:デフォルトの名無しさん
10/04/01 22:15:27
真面目に大規模なコード組むならIDEがあれば楽なことには違いない。
最後の行は何が聞きたいのかイミフ
230:デフォルトの名無しさん
10/04/01 22:16:25
>>228
makeを書けないなら統合環境使っとけ。
231:228
10/04/01 22:36:05
今の所、コンビニに行くのにメリーゴーランドに乗って出かけるような気持ちでいっぱいです。
makeのためなら使わないかも・・・
たまたま連休がめぐってきて、なおかつやる気があった日に使い方を調べてみるかもしれません。
232:デフォルトの名無しさん
10/04/02 00:09:49
エディタ・ビルド・デバッガが融合してるのは便利。もう戻れない。
Edit and Continueを初めて見た時は感動した。
233:デフォルトの名無しさん
10/04/02 10:45:38
makeをIMEに通したら負けに変換される
234:デフォルトの名無しさん
10/04/02 11:37:39
>>231
まずは付属のドキュメント読んでチュートリアルやれ
中途半端な知識を応用して手探りで取り組むより遥かに良い
235:デフォルトの名無しさん
10/04/02 11:59:07
>>228
「まじめにCをやることになって」ということだけど、この意味がわからないね。
まじめにやるのなら統合環境を使えるようになるのは当然のことだと思うし、
その気があれば数時間もあればビルドぐらいできるようになるはず。
Windows に依存したくないとか、趣味のプログラムなら VC 使う必要ないし、
自分が使えるコンパイラでやってればいいんじゃないの。
コードをトレースしてデバッグとかも必要ないんでしょうからね。
236:デフォルトの名無しさん
10/04/02 15:11:16
最近の子はmakeも書けない
237:デフォルトの名無しさん
10/04/02 15:14:24
だってautomakeあるもの
238:デフォルトの名無しさん
10/04/02 15:21:22
A. make は書けるが統合環境は覚えられない
B. make は書けないが統合環境いこなせる
Bの方が使えるよ
239:デフォルトの名無しさん
10/04/02 16:10:26
>>238
えー、まじで?
でも統合環境めんどくさくね?
俺の秀丸なんて、改行するたびにデバックモードでコンパイルされるよ。
F5とか押す必要もなければ、使う予定もない大量のファイルが生成されることもない。
ちなみにF5を押した場合に最後にデバックしたときのログが表示される。
240:デフォルトの名無しさん
10/04/02 16:53:46
>>239
改行する度にコンパイルなんかされたら、まともにコード書けないだろ。意味わかんない。
F5かどうかはともかく、コンパイルや実行の指示ができないんなんてありえない。
大量のファイルとか作成されても見る必要がないから関係ない。
統合環境でないと関数のヘルプも見れないだろうし、インテリセンスも機能しない。
リソースも直接 .rc を編集するの??
デバッグ時はコードのトレースもできないし、コールスタックの確認もできない。
つかブレークポイントも設定できないじゃん。
変数の内容を確認するときにはprintf で出力するのかwww
まともなアプリケーションなら開発効率が10倍ぐらい変わってくるねよ。
けどまぁテキストベースのお遊びのプログラムなら、どっちもで変わらんかもな。
多分そういう世界の話なんだろうな。
241:デフォルトの名無しさん
10/04/02 17:04:44
デバッグとホットスポットが見られないのは痛すぎるな。
これない環境で同レベルまで自力でやるとなると
10倍どころか100倍やっても追いつかないのでは。
問題点の発見は難しい
242:デフォルトの名無しさん
10/04/02 17:26:04
えー?
eclipseもseve automatically before build がデフォじゃん
243:デフォルトの名無しさん
10/04/02 17:50:06
書き込みテストうんこ
244:デフォルトの名無しさん
10/04/02 21:49:33
勃起するまでもない質問はここに
245:デフォルトの名無しさん
10/04/03 12:05:26
stdinを読む場合、キーを押してエンターを押しますが、エンターの押下を待たずにキーが押された時点でstdinを読ませることはできますか?
246:デフォルトの名無しさん
10/04/03 14:04:24
>>245
できないんじゃね?
Windows かどうかしらんけど、まあAPIを使えばいいじゃないの?
247:デフォルトの名無しさん
10/04/03 18:45:03
VC++6.0について質問です。
VB6.0のdebug.print、VB.NETのConsole.WriteLine()に相当する
IDEのウィンドウに結果を出力する方法を教えてください。
宜しくお願い致します。
248:デフォルトの名無しさん
10/04/03 21:14:35
>>247
::OutputDebugString()
しかしVC++6とはレトロ趣味ですね
249:デフォルトの名無しさん
10/04/04 00:20:41
VC++2008で、エディタのみ立ち上げてインテリシンクを使いたい
のですが出来ますか?
VCを立ち上げてプロジェクトを開いた形でならソース編集時にインテリ
シンクは動作しますが、できれば軽いエディタのみで編集したいのですが・・・
vs2008 express editoin
250:デフォルトの名無しさん
10/04/04 00:21:43
使えるよ。
251:デフォルトの名無しさん
10/04/04 00:23:44
>>250
おー、そのやり方をぜひ教えてください
252:デフォルトの名無しさん
10/04/04 00:34:09
タダじゃ教えられねぇな
253:デフォルトの名無しさん
10/04/04 00:46:06
>>252
教えてやれよ。
「使えるよ」「できるよ」とか一行レスされて、
やりかたを教えてくださいって聞き返してくるやつ珍しいな。
ほかはコミュ力無いから、そのまま黙っちゃうのに。
254:デフォルトの名無しさん
10/04/04 04:24:44
>>253
スルーしてるだけだと思うんだw