[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 07/16 11:48 / Filesize : 200 KB / Number-of Response : 824
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part61



1 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:37:43 ]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

656 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 15:45:29 ]
いまだに信じられんな。もうすでにVC8なんて使っていないんだが、
それほど悪いコンパイラとSTLじゃなかったはずだが。

とりあえず>>654の話から想像すると、
rvalueとlvalueの境を越えるための、あまり汎用的に使い道のない、
汚いトリックを使ってauto_ptrを実装しているが(オーバーロードとtemplate argument deductionのわずかな違いを利用するやつ)
普通に使う際にも、そのトリックが働いてしまうって事かな。
STLの実装の問題っぽいかなぁ。
ふつうauto_ptr_refのメンバをvoid *にしなければならない理由はないよな。


657 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 15:48:53 ]
>>655
あ、>>656に加えて、auto_ptr_refのコンストラクタがexplicitじゃないのか。
だめじゃん、P.J. Plaugerさん。

658 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 19:51:53 ]
失礼
リソースの 切り離し / 復元 を実行するメソッドの命名に困っているのですが
この意味に近くて使いやすい単語のペアはありませんかね?
機能的に必ず対になるものです。

候補としては
[Detach / Restore] Detach の対義語は Attach だしな
[Detach / Attach] Attach は「復元」では無い気がする
[Destruction / Resotre] Destが長い
[Destroy / Restore] Destory は Create のペアとして使ってきたので控えたい
ですが、どうも腑に落ちません。

659 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 19:58:10 ]
日本語の「切り離し」と「復元」はそもそも対義語じゃないよね・・・
切り離しとその反対なら、Detach / Attach だろうし、
復元とその反対なら、Save / Restore だろう。

Destruction なんて破壊しちゃうわけでさ、英語以前に日本語の
「切り離し」「復元」ってのがそもそも違うんじゃないか?

660 名前:658 mailto:sage [2008/04/24(木) 20:08:51 ]
>> 659
> 英語以前に日本語の「切り離し」「復元」ってのがそもそも違うんじゃないか?
うーむ・・仰るとおりですね

切り離しを実行すると 消失 という状態になる処理だったので
それを元に戻す意味で 復元 と考えていたのですが
もう少し考え直してみます。 ありがとうございました

661 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 20:12:44 ]
漏れはホンちゃんの処理の準備のためのナニにはPrepareXXXを結構使うな。
オフスクリーンビットマップやら何やらの準備とか。

662 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:22:36 ]
release / acquire

663 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:20:14 ]
>>660
Disconnect / ReConnect とか、Detach / ReAttach とかは?

664 名前:658 mailto:sage [2008/04/24(木) 22:43:04 ]
>>661
Prepare
今回は使いそうに無いけど、ひとつ賢くなりました

>>662
そういえば DirectInput に Acquire / UnAcquire (だったかな)ってのがありますね
これ良いかも

>>663
Disconnect / ReConnect
接続とはちょっと違うんですわ

ありがとうございました
スマートに命名出来るように、もうすこし設計から見直すことにします



665 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:50:04 ]
template <template<class> class T>
このようなテンプレートテンプレートパラメータが
なぜこんな書き方ができるのか今一理解できません。
誰か上手いこと説明してください

666 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:59:29 ]
なぜ出来るのかって、そりゃ出来るように言語仕様を改定して
コンパイラが対応したからだろ・・・

667 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 23:34:09 ]
class X を渡せる奴は
template <class X> と書くんだから
template <class A> class T を渡せる奴は
template <template <class A> class T> と書けるようにするのが自然だろう。
むしろ他にどんな書き方があるのかと問いたい。

668 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 23:54:08 ]
>>667
あぁ納得。
<template <class A>

最初の例だとAの部分が無かったので混乱してました

669 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 20:13:29 ]
std::exception のメソッドの例外指定はいつの間にかなくなってしまったんですか?
ttp://msdn2.microsoft.com/ja-jp/library/c4ts6d5a(VS.80).aspx
を見るのすべてのメソッドに例外指定がないんですけど。
今まで std::exception が例外を投げないことを前提にプログラムを作ってきたんですが。


670 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 01:47:18 ]
現行規格でも次期規格の最新のドラフトでも throw() ついてるから。

671 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 02:01:34 ]
だから聞いてるんじゃね

672 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 10:46:10 ]
throw() は例外を投げない事を保証するが、
unexpected() が呼ばれて落ちる事もあるので
「throw() がついてないからどんな例外が呼ばれるか分からないから
 落ちる可能性があるかもしれないのか不安だよ!」
ってのは意外とナンセンスな悩み。

673 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 11:32:34 ]
>>672
ナンセンスな私的だな。例外安全性について勉強し直せば。

674 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 11:35:43 ]
例外指定にない例外を投げたらunexpected()呼ばれるんじゃなかったっけ

つまり例外指定はあんま意味ナス




675 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 11:40:29 ]
throw()は意味あるよ。関数の実装者がユーザに対して例外を投げない事を保証するものだから。
ユーザはthrow()を見て、例外不送出であることを期待してコードを書く事ができる。

unexpected()が呼ばれる事で、その関数の例外指定に問題があるか、実装に問題がある事をユーザ/実装者が知る事ができる。

676 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 11:58:31 ]
VCは例外指定無視する(そして"実装されてないお"と警告をだす)のでVC付属のライブラリからも外しちゃったんじゃない?

677 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 12:02:46 ]
throwをつけると、おき得る例外を特定できるから、それを期待してプログラムを書ける。
なのにそれ以外の例外が投げられるという例外中の例外がunexpectedなのだな。例外にも階層があるんだね。

678 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 12:16:40 ]
>>676
空のthrow()だけ対応していなかったっけ?

679 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 12:31:32 ]
>>678
なんかそんな気もする
帰ったら確認してみるよ

680 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 12:38:39 ]
>>678
そだよ。
書いても警告が出るだけだから。

681 名前:676, 679 mailto:sage [2008/04/26(土) 20:00:39 ]
vc9で確認してみた

Debugビルドだと、throw()指定がついた関数内に直接throw文を書くとコンパイル時に警告C4297が出る。
実行時はthrow()指定無視

Releaseビルドだと、throw()指定がついた関数内に直接throw文を書くとコンパイル時に警告C4297が出る。
実行時はthrow文のところでterminateによりabort

のようだ

682 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 20:22:06 ]
VC9は何かバグバグだな
早くSP1出して欲しい
でも年末とか言ってたような希ガス・・・・orz

683 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 21:26:34 ]
>>669
例外指定があろうとなかろうと、
投げてくる(こない)例外の種類は、規格通りだから安心して使っていいよ。

684 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 22:13:35 ]
void f( T a ) {}

f の呼び出しで a を生成するときに起きる例外は f の中で発生する
例外ですか,それとも外で発生する例外ですか?




685 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 22:16:42 ]


686 名前:なにがだ mailto:sage [2008/04/26(土) 22:30:18 ]
>>684
f()に入れる前に出ちゃってるんだから大丈夫。

687 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 22:31:58 ]
もう、出しちゃったの?

688 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:46:33 ]
Winsock2.0で非同期通信について教えてくれ

connectメソッド使ってサーバに接続要求して
サーバ側でACCEPTメッセージちゃんと受け取って
接続できてるのに戻り値が0にならないのは何で?

689 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:58:54 ]
とりあえずWSAGetLastErrorでエラー内容調べてみたら?

690 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 18:06:54 ]
>>689
やってんだけどわかんないんだ

非同期通信の場合WSAEWOULDBLOCKが返されるのは正常
という記事は見つけたんだけど、鯖立ててない状態で接続しても
WSAEWOULDBLOCKしか返らないからエラー処理出来なくて困ったちゃん

691 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 18:16:49 ]
msdn2.microsoft.com/en-us/library/ms887913.aspx
>With a nonblocking socket, the connection attempt cannot be completed immediately.
>In this case, this function will return SOCKET_ERROR and WSAGetLastError will
>return WSAEWOULDBLOCK.

692 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 20:46:47 ]
C++のnamespaceとオブジェクトに関連した質問させて下さい。

namespace Aにあるクラスまたは構造体のオブジェクトを、
namespace Bのクラスに引数として渡したいのですが、どのように
記述すればいいのでしょう?出来ればnamespace AとBは別々に、
それがダメならnamespace Aの中にBがいるように出来ればと
思っています。

C++を触りはじめたばかりでわかっていないことが多いのですが、
よろしくお願いします。

693 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 21:26:36 ]
namespace AのclassXなら「A::X」

694 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 15:26:11 ]
std::vector::size_type 型のオブジェクトは std::size_t 型の
オブジェクトに変換できるでしょうか?




695 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:28:10 ]
>>694
符号なし整数で、difference_typeの全ての非負数を表す事ができる。
としか書かれてないから、実装依存じゃないかな。

696 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:38:32 ]
教えてください。
Visual Studio 2005をつかっています。
クラスのコンストラクタ内で動的に2次元配列を生成し、
ファイルから値を入力したいのですが、
デバッグ(ローカル,this,vec_x内)で確認すると、2次元配列にはなっているのですが、
行数、列数で共に1となってしまっています。
int **vec_x;
int **vec_y;
と宣言し、コンストラクタ内で、
vec_x = new int * [ size_y ];
vec_y = new int * [ size_y ];
for(i = 0; i<size_y; i++){
vec_x[i] = new int[size_x];
vec_y[i] = new int[size_x];
}
size_y,size_xは初回のnewの次点ですでに、
300,200となっていることは確認済みです。

697 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:43:38 ]
>>696
何を根拠に行数、列数が1と判断したのか詳しく。
つーか、vector<vector< int> >使ったら?

698 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:48:51 ]
>>696
デバッガでは配列の要素数は型情報として存在しない限り
表示されないというか new [hoge] で取ったサイズは表示されないというか、
要するにただのポインタなので要素は1つしか表示されないというか、
まぁそんな感じ。

699 名前:696 mailto:sage [2008/04/28(月) 16:51:46 ]
>>697
デバッグで、ローカル変数タブからです。
this以下、vec_x(int **)を見ると、
(int *)に対応するところが1段しかありませんでした。
さらに、その下(?)の階層にも要素はひとつしかありませんでした。
>>698
その要素に値を入力したとき、
うまく領域が確保できていればどう表示されるんでしょうか。


700 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:59:05 ]
>>699
詳細は>698の通り。そのデバッガは(newで確保した)可変長配列に対応していないのだろう。
確保できていたかどうかを知る手段はない。
確保に失敗したかどうかは例外が送出されるので受け取ればいい。
つーか、>697の最終行。

701 名前:696 mailto:sage [2008/04/28(月) 17:13:14 ]
むしろ、その後の値の入力に問題があるのかもしれません。
ifstream ifs("FILE_NAME");
ifs >> size_x >> size_y;

for( i = 0;i<size_y;i++){
 for( j = 0;j < size_x; j++){
  ifs >> vec_x[i][j] >> vec_y[i][j];
 }
}
としています。
入力ファイルの中身は、
整数(半角スペース)整数
整数(半角スペース)整数
...
となっており、最初にsize_x,size_yを入力しています。
size_x,size_y,vec_x[0][0]は正しく入力されたのですが、
vex_y[0][0]には正しい値は入っていません。
その後のvex_x,vec_yの各要素の値に関しても同様に正しい値は入力されませんでした。

>>697
STLはややこしくて全く手をつけていません。
お恥ずかしい限りですが…。

702 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 17:30:54 ]
>>701
g++ で一応試したけど、配列は >>696 で問題無いよ。
俺も STL 使った方がいろいろと簡単だとは思うけど。

703 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 17:40:17 ]
STLに限らず、まとまった規模の情報は何でもそうだけど、遠目に見ているうちは
頻繁に使うものと滅多に使わないものが「同じ大きさ」に見えるんで、
無駄に全容を眺めてしまって、「難しそうだなぁ」という気持ちばかり膨らんでいく。

実際には「STLを使う」ってのは、その殆どがつまり「コンテナを使う」ってことで、
これ自体はめちゃくちゃ簡単な話だよ。

704 名前:696 mailto:sage [2008/04/28(月) 18:00:02 ]
ありがとうございます。
STLを勉強してみたいと思います。
今回は(x,y)のようなベクトルによって構成された、
2次元配列を二つ作ることを考えています。
vector<vector< int> > vect1(size_y,vector<int>(size_x));
として、vect1[y][x]として要素にアクセスすればいいのでしょうか。
ttp://gimite.net/bcbqtree/qtreemain.cgi?mode=thread&thread=162

この場合のコンストラクタの動作が理解できません。
第二引数のvector<int>(size_x)でvect1を初期化するのでしょうか。



705 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 18:57:24 ]
>>704
それで使い方はいいよ。

違うよ。2個目の引数は vect1 の各要素を初期化というか instantiate してる。
constructor は 2 つ引数あるときは個数と各要素。

706 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 21:50:55 ]
>>705
下の文に引用が無いから
> それで使い方はいいよ。
> 違うよ。
が繋がった感じで、なんかワロタ

707 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 13:42:23 ]
クラスAからpublic派生したクラスBで、クラスA分のメンバ関数をprivateにしたいんですが
Virtual付いてると宣言だけじゃ駄目なんでしょうか?
環境はBCB5+XPです

class a {
public:
void Test1() {};
virtual void Test2() {};
};
class b : public a {
private:
void Test1(); //OK
virtual void Test2(); //リンカエラーが出る
};


708 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 13:56:01 ]
virtualは関数の実体を定義しないとエラーになるよ。

709 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 13:58:16 ]
それが許されたとして、aの中でよんでいるTest2はどうなるのか興味浦々

710 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 14:13:48 ]
う〜んそうだったんだ。
a.Test2()で実体があるから、問題ないんじゃないかと思ってたけど
違うのか。
すごく勉強になったよ。ありがとう〜

711 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 15:04:23 ]
class b : public a {
private:
using a::Test1;
using a::Test2;
};

やりたいのはこういうことか?

712 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 17:43:05 ]
>>711
この書き方は知らなかった。
usingについて調べてみます。

713 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 23:24:42 ]
じぇねれーてぃぶこーどって本
買ったけどC++のソース部分読めない
たじゅけて

714 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 00:30:03 ]
出版社に送って新しいのと取り替えてもらえ




715 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 00:47:17 ]
無限ループになる悪寒

716 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 07:55:38 ]
>>714
当社では、「落丁・乱丁」の場合のみお取替えをさせていただいております。

大変申し訳ありませんが、「ソースコードが理解できない」お客様につきましては、
対応いたしかねますので、ご了承いただけますよう重ねてお願いいたします。

717 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 13:45:51 ]
>>713
何がそんなに難しいの? template とかの勉強が必要なのかな?

718 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 00:30:53 ]
じぇねれーてぃぶこーどなんて本あったっけ?

719 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 00:38:16 ]
日本語ではなかった気がする

720 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 10:14:01 ]
これかぉ?
www.seshop.com/detail.asp?pid=9025

721 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 11:32:55 ]
hoge


722 名前:デフォルトの名無しさん [2008/05/06(火) 11:39:15 ]
int main ()
{
static int i (0);
struct Local
{
static void increment ()
{
++ i;
}
};
Local::increment ();
}
関数内のクラスのstaticメンバ関数(Local::increment)から
関数内の変数(i)を触れるのは規格に合ってる?
g++.real (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
では触れるのだけど.


723 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:12:30 ]
スタティックなメンバ関数からスタティックなメンバ変数が見えるのはいいんでないかい?
別に矛盾はないと思うし。
スタティックなメンバ変数ってのは、スコープ限定のグローバル変数みたいなもんだしね。

724 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 15:28:06 ]
>>723
そういう事なんだろうね。俺も >>722 さんの code 見てちょっと
えっ?て思ったけど、気分悪いがはっきりと間違っているとも言えない。
実際 compile してみると走るし(g++ 4.1.1)。どちらの static でも
外せば compile しない。



725 名前:722 mailto:sage [2008/05/06(火) 15:42:33 ]
>>723,724
規格に合っているみたい.

9.8.1に
722ほぼそのまんまの例が載ってました.


726 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:05:22 ]
int* array[10];
ってnewでやる場合どう書けばいいですか?

727 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:07:39 ]
array[0] = new int[931];

728 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:26:29 ]
>>726
もっと分かるように質問しろお( ^ω^)

729 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:31:01 ]
int** array = new int*[10];でしょjk

730 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:32:22 ]
C++のソースコードをアセンブラのコードに変換する方法があるって聞いたんですが
どうやればいいか教えてください
コンパイラはVCです

731 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:34:11 ]
コンパイラオプションで「アセンブリコードを出力する」に設定する

732 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:36:49 ]
730です
ありがとうございます

733 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:02:34 ]
void F( vecotr<int> &vec )
{
struct T
{
void operator()( int i ){ printf( "%d\n", i ); }
};

for_each( vec.begin(), vec.end(), T() );
}

こういう奴で、struct TをFのスコープ外にすると通るんだけど、
スコープ内だと通らない。
なんで?

なんで?って考えちゃダメ?

734 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:04:20 ]
>>733
関数ないクラス、構造体はtemplateクラスやtemplate関数にtemplate引数として渡せないと仕様で決まっている。



735 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:05:23 ]
誤字修正
x 関数ないクラス
o C++仕様もまともに知らない奴は死ね

736 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:07:32 ]
x 関数ない
o 関数内

こういうことだろ

737 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:18:35 ]
x こういうことだろ
o べ、別にあんたの為に修正してやってるんじゃないんだからねっ!

738 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:35:33 ]
>733
C++STDの14.3.1.2で不可になってますな。
コンパイル時に特定する必要があるので、外部リンケージの無い要素を指定できないんですな。
そういう意味で文字列リテラルも不可。
#文字列リテラルを実引数にできると色々と面白いんだけど、しようがないか……

739 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:49:27 ]
外部リンケージ?

740 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 18:10:55 ]
ケータイ小説・千の風になっての評価

評価者:ミカ  評価:★★★★★
ミカと同じ名前で同じ歳の子がこんなひどい人生を送るなんて!!
信じられない!!
一晩中泣きました!!

評価者:サナエ 評価:★★★★☆
これがあたしたちのリアル。

評価者:ち†ょ⊃ 評価:★★★★★
寝ゐ前|ニ言売ゐ女台め†ニяа止маω†ょ<τ
冫欠σ日シ立L≠†ょカヽ〃яа学木交|ニ彳テL≠маU†ニ



741 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 19:53:49 ]
ちなつ
寝る前に読み始めたら止まんなくて
次の日泣きながら学校に行きました

同じ文字を複数の文字にあてたり、いきなりローマ字とか出てくるとワケワカメになるね。

742 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 20:39:31 ]
ドストエフスキー小説・罪と罰の評価

評価者:ラスコーリニコフ  評価:★★★★★
僕と同じ名前で同じ歳の人がこんなひどい人生を送るなんて!!
信じられない!!
一晩中泣きました!!

評価者:ドストエフスキー 評価:★★★★☆
これがあたしたちのリアル。

評価者:ポルフィーリィ 評価:★★★★★
予審前に読み始めたら止まんなくて
次の日泣きながら仕事に行きました

743 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 00:57:43 ]
おい
自演してる奴がいるぞ
しかも評価は控えめw

744 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 16:17:28 ]
1         2           3           4

.     __                       __             _ 
    ,i,_,i_        ,-,_         ,-i,_,l 、      :.. :. ≡=-i'__l, 
    |  `i         /'-' `i         //l   l       iコ==ラ`'i ti 
    | lヽi li,   →  | lヽl li   →   l i,,l   l |   →     ./  /l/
    | l-'l |,l       | | // l        `"|iコ=''         /  /
.    'Fヲ|,H      E三l_l_A         | .i .|         /  / 
    ,i_| .| |                   | || |         i' /l .l,
     -'‐'                      | || |_       l l .ヽ,ヽ, 
                          ‐' ' `‐'       -'-'  -'-' 
    脱ぐ       たたむ      プログラムを     src と dest を
                         つくる      まちがえる。



745 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 19:02:05 ]
>>742
>評価者:ポルフィーリィ 評価:★★★★★
>予審前に読み始めたら止まんなくて
>次の日泣きながら仕事に行きました

あんたが言うせりふやない。

746 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 19:23:43 ]
>>744
ワロタ

747 名前:デフォルトの名無しさん [2008/05/10(土) 15:18:13 ]
重複しない複数の座標値、x,y,zという3つのキーを用いて、
そのキー(座標)の要素に値を代入、変更する処理を行おうと思っています。

現在、

class XYZ
{
 int x;
 int y;
 int z;
 int value;
};

としてXYZの配列を計算したい領域分だけ確保しているのですが
任意のx,y,zで値の変更があった場合,そのキーの要素を検索して参照、代入する方法として
何かよい方法はありませんでしょうか?
よろしくお願いいたします。

748 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 15:20:47 ]
管理が冗長すぎるだろ

749 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 15:30:18 ]
std::map<int, std::map<int, std::map<int, int> > > m;
m[x][y][z] = value;

750 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 15:45:35 ]
m[x][y][z]って・・・

751 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 15:56:35 ]
志村XYZのDVDって出てたっけ?

752 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 17:33:03 ]
>>747
言いたいことがよくわからない。
キーが与えられたら要素を返す method と代入する method (というか
メンバ関数)を作るってことじゃないの?変更がどうあるのかもよくわからん。

753 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 17:47:52 ]
XYZにoperator< を定義してsetに突っ込む

754 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 17:52:37 ]
>>747
3次元座標値ってどんな領域なのよ?

まず問題の概要を説明しやがれ
このスカポンタン



755 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 17:55:46 ]
>>754
そこは重要じゃないだろ

756 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 18:01:09 ]
これでいいだろ
#include<map>
class XYZ {
int x, y, z;
public:
XYZ(int x, int y, int z) : x(x), y(y), z(z) {}
bool operator<(const XYZ& rhs) const {
return x < rhs.x || (x == rhs.x && (y < rhs.y || (y == rhs.y && z < rhs.z)));
}
};
int main()
{
std::map<XYZ,int> m;
m[XYZ(0,1,2)] = 100;
}

757 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 05:35:20 ]
#include <new>
としているコードを見かけますが、
わざわざ<new>をインクルードするのなぜなのでしょうか?
インクルードしなくてもnewは普通に使えますよね?

758 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:02:53 ]
いらないと思うんだった、コメントアウトして再コンパイルしてみればいいんじゃね?

単に習慣でインクルードしてるだけかもしれないし。

759 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:14:42 ]
placement new, std::nothrow, std::bad_alloc を利用する際にインクルードするヘッダファイルであって、
普通の new を使うためにインクルードするヘッダファイルではない。

760 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:23:57 ]
>>757
precement newやnew演算子のオーバーロードをするときに使う。


761 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:28:16 ]
オーバーロードする際に必要だっけ?

762 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:28:52 ]
そんな事はない

763 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:29:54 ]
だよねー

764 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 12:34:18 ]
かわいい女の子が寝る前に
1分間枕元に立ってくれるための
おまじないだと、先輩から聞いたことがる。



765 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 15:51:39 ]
映画版呪怨ですね。わかります。

766 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 00:39:48 ]
struct xstring_traits{
   bool is_w() const {...}
   ...
};
struct vstring_ref { // デフォルトコピーコンストラクタ使用
   const xstring_traits* tr_;
   const char* begin_;
   const char* end_;

   const wchar_t* wbegin(){return tr_->is_w() ? reinterpret_cast<const wchar_t*>(begin_) : NULL;}
   ...
};
struct vstring_buffer {
   const xstring_traits* tr_;
   char* begin_;
   char* end_;
   ...
};
struct vstring {...}; // コピーでメモリ再確保

767 名前:766 mailto:sage [2008/05/12(月) 00:40:35 ]
(続き)

やっぱ引数がconst std::stringだと
std::string以外から受け取る場合のコストが気持ち悪いし、
const char* でことあるごとにstrlenとかするのも無駄だし、
WindowsだとTCHARとかの場合もあるけど、
WinAPIに関係無い部分にまで<tchar.h>入れるの嫌だし。

で、ただでさえ多い文字列クラスをさらに増やすのかと
葛藤しつつも自作文字列クラスを・・・。

皆はやっぱり普通にstd::string?
Windowsの場合は、
typedef std::basic_string<TCHAR>する人もいるよね。

768 名前:766 mailto:sage [2008/05/12(月) 00:41:33 ]
×引数がconst std::string
○引数がconst std::string&

769 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 00:55:18 ]
俺は、普段はconst std::string&で済ます。
std::basic_string<TCHAR>のtypedefもWindowsプログラムならよく使う。
767も言うコストが気になるならRangeを引数に取るテンプレートにする。

770 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 01:29:45 ]
スレチだけど俺は TCHAR でちゃんと動くコード(mbcsをちゃんと処理するコード)を
書く気はさらさらないので、欺瞞的なTCHARの使用はなるべく避けてWCHARにしてる。

771 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 01:44:18 ]
俺も全部 TCHAR で書いてるけど、string::find とか平気で使ってるわ。
mbcs じゃほとんど動かんコードになってる。

772 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 07:10:43 ]
>>767
文字数が必要ならこうする手も。

void hoge(const char* str, size_t len) { }
inline void hoge(const std::string& str) { hoge(str.c_str(), str.length()); }

773 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 13:28:40 ]
なんで、private継承、protected継承すると、アップキャストができなくなるのだ?

774 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 13:44:30 ]
外からprivateなメンバにアクセスできないのと同じ
外からprivateな基本クラスにはアクセスできない



775 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 13:48:23 ]
>>773 外からできなくなるだけで、中からならアップキャストできるよ。

776 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:32:36 ]
private継承するboost::operatorsがなんで動作するのかも良くわかんないな。

777 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:41:24 ]
分かんない事ばかりなのに使わなければならないC++って、怖くね?

778 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:47:31 ]
>>776
friend関数はクラスのメンバではないから・・・かな?

class A {
private:
  friend void foo() { ... } // メンバのように見えるけど実はグローバル関数なのでアクセス制御は効かない
};
int main() {
  foo();
}

779 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:48:13 ]
C++以外の言語も使いますが分からないことだらけです。

780 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:36:07 ]
何が分からないか判っていれば解ったも同然だ

781 名前:デフォルトの名無しさん [2008/05/13(火) 19:54:24 ]
friend関数、VC2005からtemplate<class T>を頭につけないと
コンパイルが通らなくなったんですね。C++0xはまだなのに
こういう仕様変更はひそかにやってるんですか?

それとも、もともと規格書にはこう決められていてやっと
Vc++2005で対応できた、ということですか?

782 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:31:33 ]
>>777
わかんない部分は無理して使う必要はないし。
でも、わかった後それを使うと今までだらだら長く書いていたコードがすっかりコンパクトにまとまってショックを受けることが多々ある。


783 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:43:20 ]
>>781
それは後者

でも前者みたいなひそかな変更もVC++はよくやる。
いや、きちんと文書化されているけどね。
例えばtype traits支援とかC99の%a書式とか。

784 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 12:41:47 ]
もう C++ なんて好きでもないし使いもしない理由。
ttp://www.hyuki.com/yukiwiki/wiki.cgi?WhyINoLongerLikeOrUseCPlusPlus

悔しいけど納得した。




785 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 13:24:39 ]
確かにめんどくさいし手間が掛かる…

786 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 14:04:26 ]
C++ Programming Languageを端から端まで二度読める知能があれば右辺値参照ごときにどうして瞼が落ちるのか。

787 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 14:14:04 ]
落ち着かない仕様
時間の掛かる修正
度重なる保守

788 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 14:15:27 ]
C++は仕事に向かない言語とういのには同意だな

789 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 14:30:05 ]
C++ Programming Languageを二度読むのに必要なのは知能ではなくて忍耐力だからな

790 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 14:57:10 ]
性能に取り憑かれているのは自分でも気づいているがどうしてもやめられない。

791 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 15:08:56 ]
Java も使うけど、C++ の方が楽に感じる事多いな。
気を付けないと保守が大変というのはわかる。
ただ、どの言語でも保守の問題はあるし、気を付ければ
そんなに問題ないと思ってるけど。まぁ、5年後になんて
言っているかはわからんが。


792 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 15:57:49 ]
C++の全機能を使わなければならない、という規約でもあったのだろうか?
演算子オーバロードは危険だと思ったなら、単にその機能を使わなければよい。
参照は不要でポインタがあれば十分だと思ったなら、単にその機能を使わなければよい。
添え字が範囲の中にあるかテストしてほしいと思ったなら、at()メンバ関数を使えばよい。

なぜ、C++の全機能 vs Cの比較なんだろう?
C+α(Better C) vs Cの比較をしないのはなぜだ?

要するに、マヌケだってことだ。

793 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 16:00:18 ]
>>784のリンク先

C++に過剰に複雑なところがあるのは同意なので、
その人(翻訳者でなく)がC++嫌ですって言うこと自体に批判は特に無いけど、
ちょっとツッコミ書くてst。

>C の方を使いたくなる
別に複雑な機能を使わなくても、
 ・#defineマクロ(MAXなど)の代わり程度のtemplate
 ・fopen,fcloseみたいなのをRAIIに扱うための極薄ラッパー
などの簡単で便利なものだけ「better C+おまけ」程度に使えば良いと思う。
巧みで知識もあると言う割には、要領が悪い気がしないでもない。

>Java や Groovy に
そこでGroovyは無いと思う・・・

俺もjava好きだから良いんだけど、
もうちょっと他の言語も挙げれば良いのに・・・

794 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 16:17:12 ]
>そこでGroovyは無いと思う・・・
ググったら実質両方Javaでワロタw



795 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 16:22:57 ]
>>792
> C+α(Better C) vs Cの比較をしないのはなぜだ?
自分一人で遊んでいるときしか、そういう使い方がうまくいかないからでは。

796 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 20:19:22 ]
なぜ今更そのネタを

797 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 21:02:02 ]
>>792
> C++の全機能を使わなければならない、という規約でもあったのだろうか?
あるとしたら逆だろう。○○しか使ってはいけない、という規約が無くてカオス化する。
あるいは、そういう規約がちゃんと機能して、自分の仕事がうまくいっているとしても、
「ここまでの規約が無ければ収拾つかなくなるC++って・・・」という虚しさは感じることになる。

「C++に文句を言う奴は、C++を使い切れないマヌケだけ」
というのは、C++信者の反撃としては割とお約束だし、部分的には当たっている。
実際、「一人でちょっとしたものを作ることさえできない」人間の八つ当たりも結構見られるし。
ただ、C++の難点というのは、主に「個人の能力ではどうにもならないところ」に表れるものであって、
この話を個人の能力に全部収めて着地させようというのは、わかっててやってるなら
いかにも姑息な「問題のすり替え」ではある。

798 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 21:14:38 ]
> 個人の能力ではどうにもならないところ
ってどこだろう

799 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 21:19:29 ]
他人の脳味噌は自分の脳味噌ではない、という事実とか、
そういう風にして複数の脳味噌によって構築された「すんげえ規模」とか。

800 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 21:21:47 ]
名前マングリングとかABIとかじゃね

801 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 21:37:50 ]
C++最高!とまでは言わないが、ハードと離れた言語は使う気しないな

802 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 21:39:21 ]
>>799
それはC++に限った話じゃないな
CでもJavaでもPHPでもよくある話だ

>>800
ABIが規定されていてうまく機能している言語ってあります?

ちなみに、自分はC++信者なわけではない
素直な感想と疑問

803 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 22:46:45 ]
>>797
どの言語でも仕事で coding する時は文法的に正しければなんでも良い
なんてことは無いはずだが。規約を全く無くせば収拾つかなくなると思うが。
規約を決めるのを C++ に限ったことではない。

元の記事はむしろ binary の compatibility を問題にしてるんじゃないかな。

804 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 23:05:02 ]
>>802-803
「有るか無いかでいったら、どの言語にだってあるぞ」
というのは確かにその通りだけど、この場合はC++の「度合いのひどさ」を問題にしているわけで、
ゼロじゃないからどの言語もみんな仲間! ってのは、話の持って行き方としてちょっと違うと思う。



805 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 23:15:56 ]
>>804
でもJavaぐらいだと>>799の問題は似たようなものな気がするけど
だんだん複雑になってきてるし
ある程度表現力が高い言語になると普遍的な問題じゃないかな

C++だとまともに書けない人でもJavaなら書けるのだろうか
そんな人がPythonならまともに書けるのか?

806 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 23:39:39 ]
規模の問題はちょっと違うだろうね。

名前マングリングに関しては確かにC++のは委員会とかの人も
普通に「どうにかしたい」って思ってそうだけど、
実質、ABIがさえ合えば問題無し、って程簡単じゃないから
再コンパイルした方が良い。

UNIX、Linux系ではオプションの変更程度で再makeすることも多いし。
それに完全にバイナリで使うなら.soとか.dllで考え方が良い。

807 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 23:46:07 ]
例外とか this ポインタの実装手段の違いとかも問題になるんじゃね。

808 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 00:27:21 ]
>>797 で言っている問題で、何でも使うか使わないかは、
compile し直そうが残る問題が多いけど。特に保守性考えると。

件の ABI の問題は compile し直せばいい問題じゃないの?
(だから問題になりえないと言っているわけではないが)

ちょっと違うことを問題にしていて議論が混ざってる気がする。



809 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 21:20:35 ]
質問があります

代入演算子をprotectedないしprivateにしたいんですが、
実装はデフォルトで生成されるものそのままでいいんです

class Hoge
{
 // さまざまなメンバ変数(代入演算子があったりなかったりする)
 Hage hage;
 Fuga fuga;
 int hensuu;
protected:
 Hoge& operator=(const Hoge&);
};

ってやったらリンクエラーになるんですがどうすればいいでしょう
イチイチ中身書くのも面倒で・・・

810 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 22:07:43 ]
イチイチ中身書くしかない

811 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 23:25:47 ]
C++0x では default キーワードでデフォルト実装を作ってくれるそうです。

812 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 23:26:25 ]
handle-bodyイディオムで書いて、handleの代入演算子をprotectedなりにすればどう?

813 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:09:30 ]
バイナリとしての0x00をchar配列に格納したいんですが、終端文字として認識されてしまいます。
こういう時ってどうすればいいのでしょうか??
ご教示いただけると幸いです。


814 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:16:56 ]
もしかしてstrcpyとか使ってるのか?



815 名前:デフォルトの名無しさん [2008/05/17(土) 01:21:39 ]
レスどもです。
いえ、const char [] 型に0x00を含む文字列を格納して、cout とかで出力しようとすると0x00以降が出力されないんです。

816 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:22:37 ]
考えるだけでも恐ろしい

817 名前:デフォルトの名無しさん [2008/05/17(土) 01:22:59 ]
それは当たり前 仕様 0は文末というのが原則です。

818 名前:デフォルトの名無しさん [2008/05/17(土) 01:24:21 ]
出力させたいんだったら、string使えば出来るはず。 こっちはサイズまではちゃんと出力したと思う。
たとえばstr.resize(10000,'\0'); cout<<str;とする。

819 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:24:53 ]
とすると、バイナリとしての0x00を途中に含むchar文字列を作りたいんですが、無理なんでしょうか??


820 名前:デフォルトの名無しさん [2008/05/17(土) 01:25:58 ]
0を含むchar配列はできるよ でもstrlenとかは間違える 自分で長さを管理すればよい。

821 名前:デフォルトの名無しさん [2008/05/17(土) 01:27:56 ]
たとええばchar配列で0を含まないならstrcpy、strcmpなどを使い、
0を含むなら長さを自分で指定するmemcpyやmemcmpを使う。

822 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:28:55 ]
いや作れるよ
char配列の内容がNTCSであることを仮定している関数・APIに
NTCSでないchar配列を突っ込んでいることが間違いなだけ

823 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:47:42 ]
なるほど!
0x00を入れると格納はされているけど出力できていなかったということですね。
長さを指定したら出力できました。
レス下さった方々ありがとうございましたm(_ _)m






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<200KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef