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


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

【初心者歓迎】C/C++室 Ver.77【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 21:21:26.11 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.76【環境依存OK
hibari.2ch.net/test/read.cgi/tech/1312621728/

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

263 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 23:49:28.42 ]
template <class T, unsigned int N> struct Array {
T elements[N];
// コンストラクタデストラクタは書かない
T & operator [] (unsigned int n) {
if(n < N) return elements[n] else throw out_of_range("out_of_range");
}
// 以下略
} ;

たぶんこれでいけると思うよ

264 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 00:15:22.35 ]
boostは使えませんので、類似のものを作るか・・・

>>263

operator[]はメンバー関数である必要があります っていわれました。
環境は、VC2010です

265 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 01:09:07.12 ]
すいません。そのままでコンパイルできました。
size N を明示的に書かなくても使えますか?

266 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 01:42:55.10 ]
無理
でもVC10なら自分で書かずともstd::arrayで範囲チェックできるだろ

267 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 01:58:25.77 ]
平松サイド  vs   橋下サイド

民主党         大阪市民
自民党          ν速民
共産党
財界
関西電力
連合
自治労
日教組
公務員
毎日新聞
MBS
解同
極左

大阪の敵が濃縮されてわかりやすくなったな


268 名前:265 [2011/12/30(金) 12:04:10.90 ]
サイズを省略するのはあきらめます。


template <class T, unsigned int N> struct Array {
T elements[N];
// コンストラクタデストラクタは書かない
T & operator [] (unsigned int n) {
if(n < N) return elements[n] else throw out_of_range("out_of_range");
}
// 以下略
} ;

int main()
{
Array<int,5> test = {1,2,3,4,5};


}
みたいにすると、
コンパイルされたクラスの テンプレート のインスタンス化 の参照を確認してください

といわれコンパイル通らないのはなぜでしょうか?

269 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 12:16:50.18 ]
MSVC2010 / C++

□使用可能なライブラリ
stl / boost / zlib / ライセンスがうるさくないものであればその他もOK

□やりたいこと
zipファイルの中身(主にファイル名)を列挙したいです。
その時に、なるべくwchar_tベースでの書庫ファイル指定や、ファイル名取得をしたいです。
zlib + minizip だと、char文字列でのやり取りしかできないように思います。

□質問
どんなライブラリをどういう感じで使うと実現できますでしょうか。

よろしくお願いいたします。

270 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 12:23:41.34 ]
charで格納された物は、ユニコードにならないんだよ。
ユニコードで格納された物はユニコードで取り出せる。
取り出しかたの問題ではないから工夫しても無理。

271 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 12:28:04.94 ]
shift+JISの方が好き



272 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 13:03:50.87 ]
EUCやSJISで格納された名前をwhar_tに変換して格納すれば良い。
zip読み取りルーチンとは関係なし。
UTF-16LEで格納されていればそのまま格納すれば良い。
格納時のエンコードの問題。

273 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 13:13:05.57 ]
VC++であるクラスを継承してメンバ変数を追加し=operatorをオーバーロードした時に
基底クラスのメンバーをコピーするのはどうやって記述すればいいんでしょうか?

class NewClass : public OldClass
{
public
int mNewMenber;
...
NewClass operator=(NewClass &nc){
/* 基底クラスのメンバーをコピー */
????????????????
mNewMember = nc.mNewMember;
return *this;
}


274 名前:273 mailto:sage [2011/12/30(金) 13:15:57.84 ]
ああ、基底クラスにも自身の=operatorが定義してあります。

275 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 13:27:13.08 ]
NewClass & NewClass::operator = (NewClass const & other) {
OldClass::operator = (other);
mNewMember = other.mNewMember;
return *this;
}

276 名前:デフォルトの名無しさん [2011/12/30(金) 13:41:19.18 ]
Visual C++ 2010 EEです。
std::swapのclass Cスペシャルを適用したまま、このエラーを消す方法はありますか?

template< typename A0, typename A1, typename A2 > class C;

// std::swapのclass Cスペシャル。※実際はもっと細かく特殊化をしているのでこの形式は崩せません。
namespace std{
template< typename A0, typename A1, typename A2 >
void swap ( C< A0, A1, A2 >& v0, C< A0, A1, A2 >& v1 ){ 略 }
};// namespace std

void func(){
typedef C< int, int, int > C_t;
std::vector< C_t > x;
std::vector< C_t > y( x.begin(), x.end() ); // error C2668: 'std::swap' : オーバーロード関数の呼び出しを解決することができません。
};

277 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 14:15:17.84 ]
>>268
> みたいにすると、
> コンパイルされたクラスの テンプレート のインスタンス化 の参照を確認してください
>
> といわれコンパイル通らないのはなぜでしょうか?
初期化子の書き方。
テンプレートを使っててもユーザー定義のコンストラクタをもたないクラスの初期化のやり方はかわらない。

struct S1 {
int a, b, c;
};

struct S2 {
int a, b[3], c;
};

struct S3 {
int a[3];
};

int main()
{
S1 s1 = {1, 2, 3};
S2 s2 = {1, {2, 3, 4}, 5};
S3 s3 = {{1, 2, 3}};
return 0;
}

278 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 14:23:28.26 ]
下のwhile文でbool_isがfalseなら以下行を読まずにwhileの先頭に戻りたいのですが、
簡単な方法はありませんか?
ifで括るとかだとちょっと長いんで・・・



while(i<max)
{
bool bool_is =hogehoge();

if(!bool)
{
i++;
以下の行を読まずにwhileの先頭に戻りたい。
}

etcetra....
i++;
}



279 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 14:26:08.90 ]
continue

280 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 14:41:22.84 ]
>>277
なるほど。では実際にこの配列を初期化して使うにはどうしたらよいのでしょう?

281 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 15:13:29.19 ]
>>280
新しめのコンパイラを使うといい
g++なら-std=c++0x





282 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 15:25:39.65 ]
>>280
ヒント
>>268でテンプレートArrayはArray<int,5>で

struct Array<int,5> {
int elements[5];
// コンストラクタデストラクタは書かない
int & operator [] (unsigned int n) {
if(n < 5) return elements[n] else throw out_of_range("out_of_range");
}
// 以下略
};

というクラスを定義する。メンバ関数を無視してみると…。

struct Array<int,5> {
int elements[5];
};

283 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 15:28:06.42 ]
>>276
class Cスペシャルのswapをstdでなくclass Cと同じ名前空間(だけ)に置く。

284 名前:281 mailto:sage [2011/12/30(金) 16:18:11.57 ]
>>280
すまん、よく読んだらバージョン関係ないな

>if(n < N) return elements[n] else throw out_of_range("out_of_range");
if(n < N) return elements[n]; else throw out_of_range("out_of_range");

セミコロンが抜けてるだけかと。

285 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 16:59:46.80 ]
openglで戦車のアニメーションを作っています
動きは前進、後退、その場での方向転換をキー操作で行いたいです

戦車自体が方向転換しても次に前進しようとした時に、ワールド座標系のX軸の向きに進むため
戦車が横滑りしてる感じになってしまいます
うまく移動→方向転換→移動をを実現するにはどうしたらいいでしょうか


286 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:07:56.55 ]
実物の戦車は横滑りするよ

287 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:08:15.37 ]
3Dプログラムできるのに方向転換すらできないとは。

288 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:10:33.85 ]
戦車ローカル座標でみた前方への移動ベクトルをワード座標に直すんだよ

289 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:12:28.23 ]
向いてる向きから進む距離を割り出せよ。北へ進むのがY+1で、北西ならX-1/√2 Y+1/√2 とかだろ。
cosθ、sinθであらわせるはずだろ。

290 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:16:10.66 ]
openglが扱えてここに書き込む時間があれば自己解決すると思うんだが。
難解な物理法則や、戦車特有の挙動などが関与してるのか?

291 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:22:54.86 ]
>>288,289
あー、戦車のローカル座標のX軸に進めることしか考えてなかったです
現在の向きから計算してやればいいのか
ありがとうございます、やってみます



292 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 18:39:35.50 ]
>>285です
やっぱりわかりません

glTranslatef(go*cos(Turn * PI / 180.0), 0.0,-go*sin(Turn * PI / 180.0) );// 平行移動
glRotatef( turn, 0, 1, 0 ); // Y軸回転

turnは回転の角度、goは前進した距離、Turnはgoが更新されたときに現在の回転の角度が入ります
原点から 方向転回→前進→方向転換 までできるんですけど
その後前進しようとすると、再び原点から方向転換した方向へ進み始めてしまいます
現在の位置を考慮しないといけないと思うのですが、うまく実装できません…

293 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 19:05:03.70 ]
>>292
戦車のモデルが +z を向いていて、Y軸回転がθだとすると、
戦車の方向ベクトルは(sinθ, 0, cosθ)となり
方向ベクトル*速度 * 経過時間 = 移動ベクトル

別な考え方では
戦車の向きベクトル = 戦車のワールド行列 * ベクトル(0, 0, 1)
あとは同様
戦車の位置+移動ベクトル=新しい位置

294 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 19:31:07.28 ]

朝日新聞は一時期300人のネット工作員をかかえ、反日工作していた。
捕まった編集者は49歳ですが、こんなカスでも1500万円の年収がもらえるんですよ。

Domain Information: [ドメイン情報]
a. [ドメイン名] ASAHI-NP.CO.JP
e. [そしきめい] かぶしきがいしゃ あさひしんぶんしゃ
f. [組織名] 株式会社 朝日新聞社

−「朝日新聞社は、とある思想やパラダイムに日本の世論を誘導する見返りに、中国から大量の資金を貰っている。」−
これはおそらく週刊誌さえ書けない。
「失語症躁鬱ニートは氏ねよ」【ネット】朝日新聞社員(49)ネットで荒らし行為、会社ごとアクセス規制へ 09.3



295 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 20:16:30.63 ]
>>285
戦車の頭のある位置 - 戦車の中心 = 戦車を中心を0とした時の方位ベクトル
方位ベクトルを正規化して x+y+z=1.0になるようにする
何故なら最大推力が1.0だから
そしたら今度は移動速度をそのベクトルに掛けて
戦車の中心座標に結果を加算する


296 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 21:36:15.20 ]
てんさいです

【東京都渋谷区】 12/31(土) 年忘れしてはならない!紅白さくら祭 みんなで「韓流紅白」をぶっ飛ばせ!
年忘れしてはならない!紅白さくら祭 みんなで「韓流紅白」をぶっ飛ばせ!

12時00分 渋谷駅ハチ公前広場 「街頭演説」(〜13時30分)
13時30分 移動
14時00分 渋谷公会堂前 「街頭演説」(〜14時45分)
15時00分 代々木公園・NHK横「イベント広場」
「年忘れしてはならない!紅白桜祭」
抗議集会・コンサート・炊き出し等々
盛りだくさんでお送りします!(〜21時00分)

297 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 23:25:43.79 ]
初歩的かもしれませんが
入力文字列const char* inputを文字コードの文字列として格納したいのですが
unsigned int len = strlen(input);
char* str = (char*)malloc(2*len + 1);
if(str){
for(unsigned int c = 0 ; c < len ; c++){
sprintf_s(&str[2*c],2,"%x",(char)input[c]);
}
str[2*len] = 0;
}
このようなコードだとsprintf_s関数でバッファが足りないと言われてしまいます
charを16進数で表示すると2Byteになると思うのですがなにか思い違いをしてるのでしょうか

298 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 23:31:16.40 ]
はい

299 名前:297 mailto:sage [2011/12/30(金) 23:34:57.26 ]
書き込んだ後に解決する法則
ヌル文字も数えろとのことですか、ぐぬぬ

300 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 23:51:08.09 ]
%02x

301 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 23:53:11.73 ]
%x も %02x も int になっちゃうから
引数キャスト (char) してもだめ




302 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 00:10:22.70 ]
>>283
それも試しましたが、やはり名前の衝突は避けられず・・
結局自前のswapの名前を変えることで対応しました
なんかC++の限界を感じた・・どうもありがとうございました

303 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 00:26:47.11 ]
まあ自分の限界を知るのは悪いことじゃないよ

304 名前:297 mailto:sage [2011/12/31(土) 00:31:45.74 ]
もしかして>>297のコードはinput[c]をunsigned charにキャストしないとマイナスの値に対してエラーになる?
とかなんとなく思った

305 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 00:54:14.97 ]
正解おぬでとう

306 名前:297 mailto:sage [2011/12/31(土) 00:57:19.48 ]
やったね!
エラーが出なくなった時、人は優しくなれる

307 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 09:25:35.25 ]
>302
これで VC++10 でコンパイル通るよ。っちゅうか std に置いたままでも通ってる。
まずはエラーが起こる最小コードから確認してみれば?

#include <vector>

namespace mine {

template<typename A0, typename A1, typename A2>
class C {};

template<typename A0, typename A1, typename A2>
void swap(C<A0,A1,A2> &c1, C<A0,A1,A2> &c2) {}

}

int main(void)
{
  typedef mine::C<int, int, int> C_t;
  std::vector<C_t> x;
  std::vector<C_t> y(x.begin(), x.end());
  return 0;
}


308 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 17:24:15.70 ]

cp2.uh-oh.jp/read_img/index/ab83e09400ff17d99f45ceee15a37e09.jpg
cp2.uh-oh.jp/read_img/index/a58c2ddc9cdbe45529ef0d58c95cc232.jpg

テレビに騙されるな(自称街の人-台本読んでるだけの業者)


309 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 02:44:43.53 ]
class Hoge
{
public:
int *count;
};

Hoge hoge =new Hoge[x];

こういう配列を作るとxの値によっては作った瞬間にエラーになってしまう場合があるのは何故ですか?
回避策はありませんか?

310 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 02:45:47.14 ]
Hoge *hoge =new Hoge[x];
の書き間違いです。

311 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 02:56:43.17 ]
> エラーになってしまう

なんで、エラーの内容を書こうと思わないんだろう…

お前がバカだからという回答でも期待してるのか?



312 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 02:57:28.18 ]
try {
Hoge *hoge = new Hoge[x];
} catch (std::bad_alloc &e) {
std::cerr << e.what() << std::endl;
}

313 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 04:22:28.69 ]
馬鹿には無理

314 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 10:47:15.57 ]

K-POPの真実
89 名前:名無しさん@12周年[sage] 投稿日:2011/12/27(火) 18:42:50.71 ID:oPBf/MSP0
12月23日、東京国際フォーラムホールAで大国男児、X−5 、C-REAL、チェ・スジョンらが出演した『K-POP LIVE for X'mas 2011』が開催された。
しかし、ふたを開けてみれば2階はすべてクローズド、1階も後列は空席だらけと、さんざんな結果に終わった。

news.infoseek.co.jp/article/cyzowoman_27Dec2011_17759
    ↓    ↓    ↓

395 名前:山師さん@トレード中[] 投稿日:2011/12/27(火) 15:21:13.95 ID:E5FNgBRR0
K-POP LIVE for X'mas 2011
公演日:2011年12月23日(金)
会場:東京国際フォーラムホールA(収容人数5000人)
出演:大国男児 / X−5 / C-REAL / Yoonji

開演前
cdn-ak.f.st-hatena.com/images/fotolife/u/ukiukineko/20111224/20111224221655.jpg
cdn-ak.f.st-hatena.com/images/fotolife/u/ukiukineko/20111224/20111224221654.jpg

開演中
cdn-ak.f.st-hatena.com/images/fotolife/u/ukiukineko/20111224/20111224222054.jpg
補助金が尽きてガラガーラ テレビは捏造演出装置


315 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:06:09.92 ]
std::unique_ptrの使い方を勉強してるのですが、単純にauto_ptrから書き換えていて躓きました。
引数として渡すときはわざわざ呼び出し側で f(std::move(p)) とするのが普通なのでしょうか?

それとも、

void f(std::unique_ptr<Hoge>& p)
{
 std::unique_ptr<Hoge> p_ = std::move(p);
}

とした方がいいのでしょうか?
この場合はどっちでもいいような気がするのですが、p_をクラスのメンバとするときに
呼び出し側にstd::moveを意識させた方がいいのかそれは冗長なのか教えてください。

316 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:10:02.98 ]
pの所有権が誰にあるかによるだろ

317 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:20:56.43 ]
もちろん、呼び出された側にあります。
想定しているのは、

class Hage
{
public:
 std::unique_ptr<Hoge> p_;
 Hage(std::unique_ptr<Hoge> p) : p_(std::move(p)) { }
};

class Mage
public:
 std::unique_ptr<Hoge> p_;
 Mage(std::unique_ptr<Hoge>& p) : p_(std::move(p)) { }
};


new Hage(std::move(p1));
new Mage(p2);


HageとMageどちらがいいのかなと思いまして。
auto_ptrの使い方を踏襲するのなら、Mageですが呼び出し側に移譲を意識させるのならHageの方が
いいような気もしています。

318 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:24:27.04 ]
class Hage
{
public:
 std::unique_ptr<Hoge> p_;
 Hage(std::unique_ptr<Hoge>&& p) : p_(std::move(p)) { }
};
所有権を移動させるなら
俺ならこうする

319 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 22:44:57.90 ]
まあ普通に考えたらそれしかない

320 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 03:12:05.20 ]
Hage(std::unique_ptr<Hoge>& p) : p_(p.release()) { }

auto_ptrを踏襲するならこれでもいいだろうが
どちらにしろ>>317はないな

321 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 17:15:58.39 ]
みんな健康でいいね。



322 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:30:28.40 ]
hoge.h内

extern int hoge[];


hoge.cpp内

int hoge[] = {0,1,2,3,4};

として、
main.cpp内で
int size = sizeof(hoge)/sizeof(hoge[0]);として配列の要素数を求めたいのですが、
これが使えません。
初期時に要素数を指定しないのはそのままにmain.cppで配列の要素数を求める方法を
教えてください、



323 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:32:39.73 ]
無理です

324 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:36:00.92 ]
無理なのですかあ。残念

325 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:39:55.69 ]
sizeof(hoge)/sizeof(int)

326 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:51:40.59 ]
それコンパイルとおらんやろ

327 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 01:04:17.85 ]
>>325
要素数求めるなら、分母はhoge[0]の方がよくね?

328 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 01:06:51.78 ]
PS2のゲームなのにPS1並のグラだろ
察しろよ

329 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 18:12:10.00 ]
>>322
// hoge.h
extern int const yousosuu;

// hoge.cpp
extern int const yousosuu = sizeof(...

330 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 23:54:07.38 ]
DXライブラリ(DirectX)やGLUT(OpenGL)って、グローバルな環境変数的な何かを使っているからか、
ウィンドウを一つしか用意できない「っぽい」んですよね。

今回の例に限らず(というかこの例はイケてないかな)、
『グローバル変数を利用するスレッドセーフではない』ライブラリを、
複数箇所から安全に利用する方法として、
使いたい人がサンドボックス的な他に影響を及ぼさない場所を用意して、
その中にライブラリを展開して、
サンドボックス名.普通の使い方、とか、サンドボックス名::普通の使い方、みたいなことって出来ませんか?

今現在あるネーム空間を無理やり他のネーム空間に突っ込む、ということが出来れば解決なのですけど。
接頭を付加できるって聞いたことないし、試してみてもうまくいかないっぽい。

言いたいことを書けているかな…。日本語が不自由で申し訳ない。

331 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 02:11:48.57 ]
ttp://toro.2ch.net/test/read.cgi/tech/1324704285/381
Javaスレでも質問したのですけど、↑についてお願いできますか?
C++の場合はどうなのでしょうか?



332 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 02:41:57.09 ]
Objectの実装にもよるし
コンパイラにもよる

333 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 09:04:05.51 ]
>>330
ライブラリをDLLでビルドして適当なnamespace内の関数ポインタに各種関数をロード

334 名前:331 mailto:sage [2012/01/05(木) 13:12:32.62 ]
>>332
ありがとうございます。

もう一件、Javaも知っている方とかに聞きたいのですけど、
C++の名前空間とJavaのパッケージとの違いですが、
・名前空間には直接変数を宣言できる
・protectedについて、Javaは同一パッケージでpublic、C++は同一名前空間でも継承が無いとprivate
みたいな感じで、ほとんど同じと考えていいのでしょうか?
C++もJavaもあまりわかってないのですが…。

335 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 15:10:56.67 ]
>>331
Javaの場合は同じなんじゃないの。
C++はデストラクタの挙動がちがってくると思うけど。

336 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 06:45:15.80 ]
>>331
javac 1.6.0_26 で確認したら全く同じになった
C++の方も一応説明すると

Object hoge;
引数無しのコンストラクタ呼び出し

hoge = ...;
代入演算子の呼び出し

Object hoge = ...;
... を引数としたコンストラクタ呼び出し

になるから、実装による

337 名前:デフォルトの名無しさん [2012/01/07(土) 17:37:13.94 ]
C/C++を一通り勉強してそれなりのWindowsの
アプリも作成できるようになり、今はC#で色々
作ったりしてるんですが、あらためて疑問に思うのは
C++のstd::endlってどういう利便性があるのでしょうか?
いっつも、"\n"で終わらしてたんですが
end lineの略なんだろうけど、いまだにわかりません。
教えてください。

338 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 18:11:55.44 ]
一応出力バッファのフラッシュも兼ねる
が、たいていの環境は行バッファリングなんで改行すればフラッシュされるので違いが見えなくなる

339 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 19:51:12.89 ]
B* b = new C();
最近Javaを学んでいたので、ついうっかり↑の書き方をしたら特に問題なく動きました。
C++的にこの書き方はありでOKですか?
B* b = new C;って書くのが筋で、止めた方がいいとかあります?むしろ()付がいい?
過去に、C c()って書くと関数の宣言にされるのを知らずに凄く悩んで、引数なしの場合は()をつけないものと思ってたのですが。
new C と書こうが、new C() と書こうが、Cの文法には触れないのでどっちでもいいのかな。
むしろ、C c()が無理なのは、Cを引きずってるからなのかな。
日本語に出来てるか心配ですが、エスパーしてもらってもいいですか?

340 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 19:54:16.61 ]
ふつうnewを使わないんじゃ。。

341 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 19:56:29.29 ]
どっちでも同じ



342 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 19:57:08.47 ]
しかもアスタつけないでそ

343 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:04:28.62 ]
=を使うな
B * p(new B());
と書くのが唯一の正解だ

344 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:05:18.80 ]
>>343
どっちでも一緒じゃん

345 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:18:02.66 ]
違う

346 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:21:11.18 ]
>>343はいちいち全部
int a(1);とか書いてるのか
バカなやつだ

347 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 20:30:30.13 ]
>>346
普通そう書くよ
hoge h(aaa);
int i = 999;
こういうふうに混在してたら見た目悪いだろ

348 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 22:22:31.10 ]
じゃあ、あったまいいお前らにきく

Hogeクラスのオブジェクトkusohogeを初期化値1で生成するとき、

Hoge kusohoge(1);

以外に書き方があるのか?

349 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 22:25:00.24 ]
Hoge kusohoge{1};

350 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 22:26:53.08 ]
Hoge hoge;
hoge.Init(1);

351 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 22:36:05.61 ]
意外にあるんだな。。

>>349
言語使用上、(と{が区別なく使えるってことか?
それとも、
Hoge kusohoge(1);
Hoge kusohoge{1};

は、言語仕様上も違い意味になるのだが、この場合に限っては
結果が同じになるという意味?

>>350
たしかに、これはあるな
むしろ、順当な書き方と言えるな

オブジェクト変数名に、あたかも関数のように()が
つく表記の方が、はじめ見たときは違和感を感じた



352 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:15:38.73 ]
>>348
Hoge hoge = 1;

353 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:17:58.59 ]
>>337
CRLF、Multibyte-charの緩衝とか

354 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:22:40.91 ]
CRLFは関係なくないか

355 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:26:51.23 ]
endlはついでにフラッシュすんだよ

356 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:27:58.95 ]
crc32を計算したいのですが、ネット上に落ちているコードを比べてみても、
2パターンあるみたいで、どれが正しいのか分かりません。

データ: "a" (1バイト

boostとか、あとは動的にテーブルを生成しているタイプのコード
(テーブルは 0x00000000, 0x77073096, で始まるようです)
crc32: 0xe8b7be43

0x00000000, 0x04C11DB7 で始まるテーブルを持つコード
crc32: 0x19939b6b

ttp://blog.goo.ne.jp/masaki_goo_2006/e/69c68a18c872338e8c2751d662706f46

これらは何が違うのでしょうか?

357 名前:デフォルトの名無しさん mailto:sage [2012/01/07(土) 23:29:38.63 ]
アルゴリズムスレへどうぞ

358 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 01:58:12.32 ]
アルゴリズムスレ落ちたままなんだな
まあwikipediaでもみればいいんじゃないか

359 名前:デフォルトの名無しさん [2012/01/08(日) 07:55:56.97 ]

int get_int()
{
  int i = 1;
  return i;
}

void func_int(const int* p)
{
  int i = *p;
  std::cout << "i: " << i << std::endl;
}

void main()
{
   func_int( &get_int() ); // error C2102: '&' に左辺値がありません。
}

  get_int() の返す int の一時オブジェクトのポインタを func_int() に渡したいのですが,
どうやれば良いでしょうか?


360 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 07:59:49.48 ]
関数が返すのは「値」であって、「変数」を返すわけではない。

361 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 10:11:39.78 ]
>>359
> get_int() の返す int の一時オブジェクトのポインタを func_int() に渡したいのですが,

そもそもなんでそんなことしたいのさ。

int の一時オブジェクトとやらがあるのかどうかは知らんけど、仮にあったとしても func_int( ) に
渡った時点でそのオブジェクトは消えてるかもしれないよ。

「一時」オブジェクトなんだし。



362 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 10:52:02.73 ]
>一時オブジェクトのポインタ

そんな邪悪なものは封印すべきだ

363 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 10:58:58.24 ]
一次オブジェクトへのポインタ(あるいは参照)は普通に使うでしょ
無理やりmoveっぽいことを書きたい時とかに使う






[ 続きを読む ] / [ 携帯版 ]

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

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