【初心者歓迎】C/C++室 Ver.77【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/12/12(月) 21:21:26.11ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.76【環境依存OK
http://hibari.2ch.net/test/read.cgi/tech/1312621728/
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
0002デフォルトの名無しさん
2011/12/12(月) 22:01:55.18型キャストがビットシフトの前に行われるのって
言語仕様でしたかね?
0003デフォルトの名無しさん
2011/12/12(月) 22:22:29.786.5.7 ビット単位のシフト演算子 意味規則 整数拡張を各オペランドに適用する。
らしいです。
0004デフォルトの名無しさん
2011/12/12(月) 22:26:00.04算術演算子の優先順位
ttp://www.bohyoh.com/CandCPP/C/operator.html
キャスト演算子の方がシフト演算子より優先順位高いですね。
0005デフォルトの名無しさん
2011/12/12(月) 22:51:51.260006デフォルトの名無しさん
2011/12/12(月) 23:05:20.87「暗黙の」型変換というところに引っ掛かりを覚えるのだが・・・
さらに言えば、ビットシフトとブール演算が右辺で複合的に行われた場合、それらのビットシフトやブール演算より先に
左辺の型を見て右辺の数をのこらず自動型変換って、期待していいものなのか?当てにしているとあぶなくないか?
0007デフォルトの名無しさん
2011/12/12(月) 23:22:54.97型変換が行われないと、桁あふれで右辺は0になる
0008デフォルトの名無しさん
2011/12/12(月) 23:23:55.25ttp://ja.wikipedia.org/wiki/%E6%B1%8E%E6%95%B4%E6%95%B0%E6%8B%A1%E5%BC%B5
0009デフォルトの名無しさん
2011/12/12(月) 23:24:38.10c<<16の段階で、両辺が整数型にキャストされてる。
左辺 i が整数であるかどうかはまったく関係ない。
double d = c << 16;
のごとく書いても、cは整数型にキャストされるし
char s = c << 16;
のごとく書いても、cは整数型にキャストされる。
(そして結果はchar型にキャストされて面白い事になる)。
0010デフォルトの名無しさん
2011/12/12(月) 23:31:55.620011デフォルトの名無しさん
2011/12/12(月) 23:38:03.81(単に整数型にするだけなら桁あふれでゼロ)
0012デフォルトの名無しさん
2011/12/12(月) 23:40:00.07intはint型と書いてくれよ。char型だって整数型なんだから。
0013デフォルトの名無しさん
2011/12/12(月) 23:51:16.42すんません。偉そうに教える程の知識は無いんですが、、、
「暗黙」だろうが「明示」だろうが、優先順位は変わらないと思います。
そして、式内では「精度の高い型」に変換されるので
i = c<<16;
は、うちは64bitOS(linux)
(1)16はint型とみなされる。
(2)c<<16 で右辺の16はint型なので、cは暗黙的にint型にキャストされる。
(3)i = c<<16 で左辺の(unsigned int)にキャストされる。
ってな感じだと思っていたのです。
・・・って、みなさんの言う、整数拡張ってwikiって見たら、
確かに演算子ではないですね。ということは、無条件に行われるから
優先順位が一番高いとも言えるのかな。
すっかり、ミイラ取りがミイラになっています。
とりあえず、多分、前スレ>>999さんは
unsigned char c;
unsigned int i;
c = 0xff;
i = (unsigned char)(c<<(unsigned char)(16));
printf("c: %x\n", (unsigned int)c);
printf("i: %x\n", i);
を期待されていたのでしょう。
0014デフォルトの名無しさん
2011/12/12(月) 23:53:16.02× 前スレ >>999
○ 前スレ >>997
0015デフォルトの名無しさん
2011/12/12(月) 23:56:03.66http://mamorenihon.files.wordpress.com/2011/09/kao-demo1.jpg
http://blog-imgs-34.fc2.com/d/e/l/deliciousicecoffee/201108040637592d3.jpg
http://tantawan.blog.so-net.ne.jp/_images/blog/_13f/tantawan/E88AB1E78E8BE4B88DE8B2B7-18690.jpg
http://stat.ameba.jp/user_images/20110820/18/lisa-w-paz/07/00/j/o0500032111430159404.jpg
http://livedoor.blogimg.jp/news30over/imgs/c/3/c3860b80.jpg
0016デフォルトの名無しさん
2011/12/13(火) 00:22:04.65今まで何の疑問も持たずに見過ごしてきたけど、順位が間違ってるね。
配列の添字[]は関数呼び出し()より順位が高いですよ・・・
0017デフォルトの名無しさん
2011/12/13(火) 00:24:10.32どんな式でその二つの優先順位の違いが問題になるの?
0018デフォルトの名無しさん
2011/12/13(火) 02:37:54.17ttp://hibari.2ch.net/test/read.cgi/tech/1322562648/
のスレを見て、他人のプログラムを見て色々と勉強させてもらっているのですが、
そのスレの、>>258 が質問し、>>259 が解答したプログラム(元コード ttp://ideone.com/BRXCl)があるのですが、
そのプログラム中にある、
char *roman_nums[] = {"XI", "XII", "XIV", "XVIII", "XXIV", "XLIII", "XCIX", "CDXCV", "MDCCCLXXXVIII", "MCMXLV", "MMMCMXCIX"};
for (i = 0; i < sizeof(roman_nums)/sizeof(*roman_nums); i++) {
という文の、sizeof(roman_nums) / sizeof(*roman_nums) ところが分かりませんでした。
前(分子)のsizeofと後ろ(分母)のsizeofが何なのかがわかりません。割るとどういうことになるのでしょうか。
前の方は、roman_numsは配列なので&roman_nums[0]ってことでしょうか??
自分の理解が大分足りてないようで、どなたか解説をお願いできませんか。よろしくお願いします。
0019デフォルトの名無しさん
2011/12/13(火) 02:41:37.26いちいち割らなくても_countofという便利なものもあるけど
0020デフォルトの名無しさん
2011/12/13(火) 02:56:20.91ほんとですね。
今自分で試したのですが確かに配列の数がピッタリでますね。
どうしてこうなるのでしょうか・・・
0021デフォルトの名無しさん
2011/12/13(火) 02:58:20.66sizeof(*roman_nums)で配列1個の大きさがわかるから
*roman_numsが難しかったらroman_nums[0]と読み替えてもいい
0022デフォルトの名無しさん
2011/12/13(火) 03:03:42.52>*roman_numsが難しかったらroman_nums[0]と読み替えてもいい
ああ!そういえばそうですよね。すっかり忘れてました。
お陰ですっきりしました!!
ほんとありがとうございます!
0023デフォルトの名無しさん
2011/12/13(火) 06:54:21.79これはゼロになる
unsigned char c;
uint64_t i;
c = 0xff;
i = c<<63;
-----------------------------------------
これならMSBにビットが残る
unsigned char c;
uint64_t i;
c = 0xff;
i = (uint64_t)c<<63;
-----------------------------------------
暗黙の型変換でやってくれるのは、int(機種依存の?)まで?
それはそうと、
:-] ←ドヤ顔
0024デフォルトの名無しさん
2011/12/13(火) 08:02:56.86そそ、暗黙の型変換は左辺に何があるかは知らない。
0025デフォルトの名無しさん
2011/12/13(火) 10:57:50.76整数拡張だったら大きい方で計算されるんじゃね?
unsigned charとintならint、uint64_tとintならuint64_t
0026デフォルトの名無しさん
2011/12/13(火) 11:41:24.46こっちの方が良かったかな?
ttp://www.cppreference.com/wiki/jp/operator_precedence
でも、添字[]と関数呼び出し()の優先順は同じはずですよ。あとは、結合の順番だけのはず。たしか・・・・。
>>17
たぶん、関数ポインタあたりを使うと書ける(問題になる)んじゃない?書いたこと無いけど。
0027デフォルトの名無しさん
2011/12/13(火) 13:16:20.6510個の数値を入力
入力された各々の数値を二倍して表示するプログラム。
0028デフォルトの名無しさん
2011/12/13(火) 13:24:43.76for(i=0;i<10;i++){scanf("%d",&n);printf("%d ",2*n);}
0029デフォルトの名無しさん
2011/12/13(火) 15:02:10.310030デフォルトの名無しさん
2011/12/13(火) 15:24:10.410031デフォルトの名無しさん
2011/12/13(火) 17:03:53.64ってか釣りか
0032デフォルトの名無しさん
2011/12/13(火) 17:19:14.88x2(10);
0033デフォルトの名無しさん
2011/12/13(火) 18:12:03.06#include<stdio.h>
#include<stdlib.h>
int main(){
int i, n;
char s[1000] = "", *p = s;
for (i = 0; i < 10; i++) {
printf("%d. ", i + 1);
scanf("%d", &n);
sprintf(p, "%d ", 2 * n);
while (*p)p++;
}
printf("%s", s);
return 0;
}
0034デフォルトの名無しさん
2011/12/14(水) 11:27:42.91Debugでは意図通りに出力されません。
template<typename T> T *aloca(size_t t){
return (T*)_alloca(sizeof(T) * t);
}
int _tmain(int argc, _TCHAR* argv[]){
int *a = aloca<int>(1); *a = 1;
int *b = aloca<int>(1); *b = 2;
int *c = aloca<int>(1); *c = 3;
printf_s("*a = %d\t", *a);
printf_s("*b = %d\t", *b);
printf_s("*c = %d\t", *c);
return 0;
}
Debug出力
*a = 3 *b = 1 *c = 1
Release出力
*a = 1 *b = 2 *c = 3
やはりalocaを抜けた時点で_allocaが確保したメモリは解放されてしまうのでしょうか?
だとするとReleaseで動いているように見える理由は?
どうすればDebugでも動くようにできるでしょうか?
0035デフォルトの名無しさん
2011/12/14(水) 11:47:19.34http://msdn.microsoft.com/ja-jp/library/wb1s57t5%28v=vs.80%29.aspx
_alloca は、プログラム スタックから size バイトを割り当てます。
割り当てられた領域は、単に割り当てがスコープ外になる場合ではなく、
呼び出し関数が終了する場合に、自動的に解放されます。
このため、_alloca から返されたポインタ値を引数として free に渡さないでください。
0036デフォルトの名無しさん
2011/12/14(水) 13:35:47.860037片山博文MZ ◆0lBZNi.Q7evd
2011/12/14(水) 14:08:39.470038片山博文MZ ◆0lBZNi.Q7evd
2011/12/14(水) 16:09:24.02#define MYALLOCA(type, count) ((type *)_alloca((count) * sizeof(type)))
0039デフォルトの名無しさん
2011/12/14(水) 17:08:08.53名前空間に入れられないのがつらいけど
それでいこうと思います。
ありがとうございました。
0040デフォルトの名無しさん
2011/12/14(水) 19:56:37.040041デフォルトの名無しさん
2011/12/14(水) 20:43:11.65まっ、苦労するのは確かだな。
0042デフォルトの名無しさん
2011/12/14(水) 20:50:01.99|:::::::::::::;;;ノ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|::::::::::( 」 < 民主になればこの世はバラ色、政権交代!
ノノノ ヽ_l \______________
,,-┴―┴- 、 ∩_
/,|┌-[]─┐| \ ( ノ
/ ヽ| | 在 反 | '、/\ / /
/ `./| | 日 日 | |\ /
\ ヽ| lゝ | | \__/
\ |  ̄ ̄ ̄ |
| ┬ |それでも懲りない日本人、韓国民団総理支持率35%w早く目を醒まそう!
0043デフォルトの名無しさん
2011/12/14(水) 21:50:18.48プログラムとしては別スレッドで受信したデータをファイルに記録とウィンドウに表示するものなのですが、20分ほどするとJITのウィンドウが開いてプログラムがフリーズしてしまいます。
その際にVSを立ち上げて落ちた箇所を調べるとfwriteの実行で落ちているようで、書き込むデータのサイズが定数を使用しているにも関わらずfwriteの内部で値が全く違う大きな値になっていました。
このような現象の原因についてご存じもしくは思い当たるふしがあれば教えていただけないでしょうか?
よろしくお願いします。
0044デフォルトの名無しさん
2011/12/14(水) 22:03:51.91何故そう思ったかというと、つい数日前俺が勉強したばかりだからだ
0045デフォルトの名無しさん
2011/12/14(水) 22:10:24.40C/C++のvolatilはjavaやC#とちがってメモリバリアもアトミックも
保証されていないぞ
0046デフォルトの名無しさん
2011/12/14(水) 22:27:41.84間違って、初期値のままポインタの参照先の値を書き替えてしまうと、かなり危険なきがするんですが。
0047デフォルトの名無しさん
2011/12/14(水) 22:32:29.62間違って書き換える方が悪い、という考えで作られているのがC++。
0048デフォルトの名無しさん
2011/12/14(水) 22:44:51.81A * p = NULL;
*p = hogehoge;
みたいなことを言ってるの?
余裕で落ちるから大丈夫
0049デフォルトの名無しさん
2011/12/14(水) 22:45:52.23class CHoge;
CHoge* p_test = NULL;
p_test = new CHoge();
↑の処理は、
一番上はクラスの宣言、
二番目はCHogeを入れるためのp_testという名前の箱を用意してやる、
一番下はコンストラクタを呼び出して、実態を与えてやる
といった処理でしょうか?
0050デフォルトの名無しさん
2011/12/14(水) 23:18:04.550051デフォルトの名無しさん
2011/12/14(水) 23:28:57.40よく気がついたな
かなりヤバイコードだから絶対に真似しちゃイカンぞ
0052デフォルトの名無しさん
2011/12/14(水) 23:29:11.50/*スタック領域にクラスのポインター型変数を確保*/
p_test = new CHoge();
/*ヒープ領域にクラスに必要なメモリを確保した後、
そのクラスのコンストラクタを呼び出し、
そのポインタをp_testに代入*/
0053デフォルトの名無しさん
2011/12/14(水) 23:32:32.42確保の直後に初期化されなければならないし、破棄は(コード的に)確保と隣接した場所で行われるから
要するに無効なまま運ばれる区間は限りなく短くなってるはずなので
0054デフォルトの名無しさん
2011/12/15(木) 00:40:15.580055デフォルトの名無しさん
2011/12/15(木) 09:43:31.74>namespace manko {
> extern "C" {
> #include <Windows.h>
を見て、へーこんなことできるんだと思って試してみた。
namespace Impl{
struct impl_struct{ char c[8]; };
extern "C" void externCtest(impl_struct *a){
for(int t = 0; t < 8; ++t) printf_s("%d ", a->c[t]);
printf_s("\n");
}
}
namespace Decl{
struct decl_struct{ int a, b; };
extern "C" int externCtest(decl_struct *a);
}
void externCtest(){
Decl::decl_struct a = { 1, 2 };
printf_s("externCtest ret = %d\n", Decl::externCtest(&a));
printf_s("&Decl::externCtest = %x\n", (int (*)(Decl::decl_struct*))Decl::externCtest);
printf_s("&Impl::externCtest = %x\n", (void (*)(Impl::impl_struct*))Impl::externCtest);
}
extern "C"をつければ、どのnamespaceで定義しても
どのnamespaceで宣言しても、引数や戻り値がでたらめでも
名前と引数のサイズとかが合ってれば動くみたいなんだけど
これってちゃんと仕様に沿ってるの?
0056デフォルトの名無しさん
2011/12/15(木) 10:16:23.06using Impl::externCtest;
using Decl::externCtest;
Impl::impl_struct a = { 3, 4, 5, 6, 7, 8, 9, 10 };
Decl::decl_struct b = { 1, 2 };
externCtest(&a);
auto bret = externCtest(&b);
0057デフォルトの名無しさん
2011/12/15(木) 23:24:31.68ありがとうございmす
0058デフォルトの名無しさん
2011/12/16(金) 13:43:12.04__imp__
と
__imp_
の違いってなに?
0059デフォルトの名無しさん
2011/12/16(金) 17:45:05.810060デフォルトの名無しさん
2011/12/16(金) 19:33:04.17__imp___func -> __imp__ + _func
__imp__func -> __imp_ + _func
ではなく
__imp___func -> __imp__ + _func
__imp__func -> __imp__ + func
_func と func の違いは呼出規約(stdcallかcdeclか)の違い
0061デフォルトの名無しさん
2011/12/17(土) 01:05:33.530062デフォルトの名無しさん
2011/12/17(土) 02:47:27.11{
[型] hoge(bool var);
}
↑のような関数があるとき、
Hoge hoge;
bool foo = true; // どちらでもいいので初期化
hoge.hoge(foo); // (1). bool型の変数指定
hoge.hoge(true); // (2). trueの定数指定
hoge.hoge(false); // (3). falseの定数指定
と出来ますが、
(3)以外のパターンでコンパイルエラーにしたいのですが、可能でしょうか?
falseしか指定できないenumを作るしかありませんか?
0063デフォルトの名無しさん
2011/12/17(土) 03:04:53.79ちなみにC++0xなら、右辺値参照を使えば(1)をコンパイルエラーにできる。
hoge(bool &&var);
0064デフォルトの名無しさん
2011/12/17(土) 03:21:42.820065デフォルトの名無しさん
2011/12/17(土) 03:33:14.60申し訳ありません。
この例を見ると確かにそのとおりです。言われて気がつきました。
簡単に示そうとして、情報が欠落してしまいました。
Hogeのコンストラクタとして3つ、
Hoge hoge;
Hoge hoge(false);
Hoge hoge = false;
hoge.無効化メソッド(false);
のを許して、以下を許さない
Hoge hoge(true);
Hoge hoge = true;
Hoge hoge(bool foo = false);
ものを考えていました。
boost::optionalのintだけのようなものをライブラリなしでつかいたいな、と。
class Hoge{public: bool 有効化フラグ_; int hoge_};を使って。
おとなしくenumします。
右辺値参照初めて知りました。少し勉強します。
0066デフォルトの名無しさん
2011/12/17(土) 03:34:10.36○hoge.無効化メソッド();
0067デフォルトの名無しさん
2011/12/17(土) 04:09:31.81lhs < Left Hand Side (左辺)
rhs < Right Hand Side (右辺)
0068デフォルトの名無しさん
2011/12/17(土) 09:39:11.49template<bool p> struct c_bool
{
static bool const value = p;
};
struct Hoge
{
void hoge(c_bool<false> const & p);
};
Hoge h;
bool p;
h.hoge(p); // error
h.hoge(c_bool<true>()); // error
h.hoge(c_bool<false>()); // ok
0069デフォルトの名無しさん
2011/12/17(土) 16:51:49.670070デフォルトの名無しさん
2011/12/17(土) 17:01:17.89int 123 →"00123"
int 1234→"01234"
みたいに0で桁数を揃えるフォーマットにするにはどうしたらいいですか?
0071デフォルトの名無しさん
2011/12/17(土) 17:07:36.10#include <sstream>
#include <iomanip>
std::string to_str(int x, int d)
{
std::ostringstream oss;
oss << std::setw(d) << std::setfill('0') << x;
return oss.str();
}
0072デフォルトの名無しさん
2011/12/17(土) 17:21:09.91ありがとうございます!
0073デフォルトの名無しさん
2011/12/17(土) 17:26:44.94std::cout << (boost::format("%05d") % str).c_str();
だったかな。(うろ覚え)
std::cout << boost::str(boost::format("%05d") % str);
とか。(うろ憶え)
0074デフォルトの名無しさん
2011/12/17(土) 17:29:49.92%dとstd::stringは、激しくマズイ気がするが気のせいだったらすまない。
0075デフォルトの名無しさん
2011/12/17(土) 17:41:39.80>みたいに0で桁数を揃えるフォーマットにするにはどうしたらいいですか?
絶対ないというならいいけど、int 123456 の時に "23456" か "123456" の
どっちになって欲しいか書いたほうがいいと思う。
0076デフォルトの名無しさん
2011/12/17(土) 18:32:08.83{
enum B {aaa, bbb, ccc}
}
int main(){
A::B b = A::aaa; // ※1
return 1;
}
「※1」の右辺に、凄い違和感があって、
「A::B.aaa」か「A::B::aaa」ってなるのが妥当に思えるのですけど、
何でcの仕様がこうなっていて、
何に私が悩んでいるのか解決できるようなエスパーがいたら、
助言をして欲しいです。よろしくお願いします。
0077デフォルトの名無しさん
2011/12/17(土) 18:32:59.190078デフォルトの名無しさん
2011/12/17(土) 18:36:48.96>>67
ありがとうございます。スッキリ出来ました。
0079デフォルトの名無しさん
2011/12/17(土) 18:46:53.65俺も初めは違和感だったな
それにC#ではA.B.aaaとなるし
考え方だがCでは整数に名前が付いてるだけ、
くらいの認識と考えれば、その言語仕様も少し納得しやすいかもしれない
0080デフォルトの名無しさん
2011/12/17(土) 18:56:04.210081デフォルトの名無しさん
2011/12/17(土) 19:02:47.350082デフォルトの名無しさん
2011/12/17(土) 19:20:08.60typedef int(*ENUM)(); // これで全て解決だ!
008376
2011/12/17(土) 19:22:39.05つまり、enum自体はc++的なものではなくてc的なものなので、グローバルに展開されてしまうってことですね。
ただし、c++なので、クラス内や名前空間内に限定することは可能になっている、と。
納得できました。
ありがとうございます、>>79,>>80,>>81。
0086デフォルトの名無しさん
2011/12/17(土) 21:32:25.42C++で、GLSLのnoise関数のような関数はありますか?
つまり、ある値を入に対し、決まった、予想の付かない値を返す関数なのですが
0087デフォルトの名無しさん
2011/12/17(土) 22:33:45.66コピーコンストラクタを用意する際には、
operator=も用意するように、
と教えていただいたので、そのようにしてました。あるとき、
そのoperator=の最後に記述する「return *this;」を忘れていました。
ところが、特に問題が出ていませんでした。
これは記述する必要がないのでしょうか?
適当なhash関数はいかが?MD5/SHA-1/2(256) とか。
0089デフォルトの名無しさん
2011/12/17(土) 22:47:36.22ありがとうございます
検索してみるとhttp://www.studyinghttp.net/md5このページを見つけました
しばらく見て参りますが、他に良い解説サイトなどありましたらご紹介くださいませ
0090デフォルトの名無しさん
2011/12/17(土) 23:13:57.89下に示すような記述をする為には、自身を返す必要があるから。
従って、代入した結果を必要としないのなら問題にならない。
--
YourClass foo, bar, baz;
foo = bar = baz;
009165
2011/12/17(土) 23:25:10.40http://codepad.org/VybcCvXY
http://ideone.com/WA7TG
009265=91
2011/12/17(土) 23:34:02.42ttp://www.geocities.jp/ky_webid/cpp/library/027.html
関数のプロトタイプ宣言で、throw(ココ)に書く内容でどのような変化があるのか調べています。
↑のページの「std::bad_exception」の説明に関して試しています。
178行目の「i2 = hoge5;」において、54行目の関数が呼ばれています。
このとき、
プロトタイプ宣言で、54,55,56のパターンや、
throwする例外オブジェクトで、60,61,62の内容を試すのですが、
「std::bad_exception」がthrowされません。
どこを修正すると説明の通り、「std::bad_exception」がthrowされるか教えていただけませんか?
よろしくお願いします。
009365=91
2011/12/17(土) 23:49:52.60「eclipseのc++」や「ideone.com」で試した際と、
「Visual c++」で試した際と、
の間に挙動の違いがあって、205行目が、
前者で実行されない
後者で実行される
のですが、何故なのでしょうか?
gccでは、宣言以外の例外発生の後に即terminate();
visual c++では、プロトタイプ宣言のthrow()を無視している
のでしょうか?
http://ideone.com/qqqhp ※60行目、178行目、205行目
009465=91
2011/12/17(土) 23:57:49.65158行目の
「hoge5」
とした場合に、問答無用で、
「(int)hoge5」
「int(hoge5)」
とした場合と同じにすることは可能でしょうか?
可能であれば教えてください。
(型の指定がない場合は、int(T)としたい。が、代入先がboolの場合はbool。「.」や「->」など他のoperatorも残したい。)
0095デフォルトの名無しさん
2011/12/18(日) 00:02:42.24ありがとう
0096デフォルトの名無しさん
2011/12/18(日) 01:41:15.51エラーの理由をみるにcodepadでは(その警告を出すなら)警告もエラー扱いする設定になってる。
そしてそのソースに対してはクラス定義でのメンバの宣言順とコンストラクタでのメンバ初期化子の順序が違うと警告がでてるからエラーになる。
009791
2011/12/18(日) 02:53:35.67なるほど。理解できました。ありがとうございます。
エラーの内容が続くwarningで示されていたとは。
独立しているのだと勘違いして、warningは無視していました。
http://codepad.org/lTFa56Ar
動きました。
009887
2011/12/18(日) 02:57:54.25>foo = bar = baz;
{
bar = baz;
foo = bar;
}
これと等価だと思っていました。わかりやすい説明ありがとうございます。
0099デフォルトの名無しさん
2011/12/18(日) 03:16:04.70http://codepad.org/OuxHRqHa
で、41行目にエラーがあり、その内容は、
「定義されていない変数(名)へのアクセスがある」
といったものなのですが、
Visual c++ 2010 Expressで試すと、素通りされてしまいました。
利用していないメソッドの場合も確認してくれるようにするには、どのような設定をすればよいのでしょうか?
Visual c++のスレは一週間くらい人大杉で書き込めませんでした。
0100デフォルトの名無しさん
2011/12/18(日) 03:38:14.38そりゃ hoge_ が定義メンバにも無いし
継承もしてないからじゃないの?
0101デフォルトの名無しさん
2011/12/18(日) 03:54:06.530102デフォルトの名無しさん
2011/12/18(日) 04:59:59.92コンソールの他に、
独立した子ウィンドウをつくって、そこでなにやら処理したいのですけど、
インスタンスハンドルやらウィンドウハンドルやら説明を読んでも読んでもさっぱりわかりません。
そんなソースを示してくれているページを知っていたら教えてください。
簡単であれば書いてくれると助かります。
0103デフォルトの名無しさん
2011/12/18(日) 05:20:53.600104デフォルトの名無しさん
2011/12/18(日) 05:52:09.57変な質問して申し訳ありませんでした。自己解決しました。忘れてください。
0105デフォルトの名無しさん
2011/12/18(日) 08:30:59.04c++しか知らなくて、Javaをはじめてみたのですけど、不便で仕方がないかなぁ、なんて…、態度でかくてすみません。
0106デフォルトの名無しさん
2011/12/18(日) 08:42:28.350107デフォルトの名無しさん
2011/12/18(日) 09:48:10.70あれば良かったのにね〜
文字列は+=できるのにね
0108デフォルトの名無しさん
2011/12/18(日) 11:10:52.87いらんわこんなもん
0109デフォルトの名無しさん
2011/12/18(日) 11:15:28.010110デフォルトの名無しさん
2011/12/18(日) 11:17:41.86クラスCHogeが構造体m_hoge[5]をメンバ変数として持つ場合、
まとめて初期化することは出来ますか?
0111デフォルトの名無しさん
2011/12/18(日) 11:27:26.080112デフォルトの名無しさん
2011/12/18(日) 11:27:45.79そうでないならアラインドストレージの配列にして配置new
0113デフォルトの名無しさん
2011/12/18(日) 11:28:44.510114デフォルトの名無しさん
2011/12/18(日) 11:32:56.34自分に必要ないなら使わなきゃいいだけなのに、
必要もないのに使って「いらんわ」ってアホすぎ。
0115デフォルトの名無しさん
2011/12/18(日) 11:37:36.67使ってないよ
なんで使ってると思ったの?
0116デフォルトの名無しさん
2011/12/18(日) 11:48:11.320117デフォルトの名無しさん
2011/12/18(日) 12:14:10.870118デフォルトの名無しさん
2011/12/18(日) 12:20:16.97なんで感じてるとおもったの? (w
0119デフォルトの名無しさん
2011/12/18(日) 12:26:28.997月の段階で民主党が2兆円の復興予算を組んだとき
自民党が要請した復興予算は累計17兆円
自民党の17兆が7月時点でに決定されていたのなら
今の日本はもう少し違って居た筈だ
ちなみに関東大震災のときは復興予算として現在の価値にして150兆円以上を組んでいた。
この事実を知れば、予算の規模の小ささ、ましてや増税なんて奇知涯にも程があると思わざる負えない。
で、その17兆とやらの財源は?東電売却?
0121デフォルトの名無しさん
2011/12/18(日) 12:40:02.400122デフォルトの名無しさん
2011/12/18(日) 12:46:58.89誰がお前の事って言った?
日本語をちゃんと読んでレスしなよ
0123デフォルトの名無しさん
2011/12/18(日) 13:11:02.53小規模なプログラミングやっててよく使うんだが
0124デフォルトの名無しさん
2011/12/18(日) 13:15:39.990125デフォルトの名無しさん
2011/12/18(日) 13:35:31.11可読性の問題かあ
自分一人でやる分には問題ないかな
0126デフォルトの名無しさん
2011/12/18(日) 14:43:24.80自分のことなんて思ってないよ
なんで俺のことっておもったの? (w
0127デフォルトの名無しさん
2011/12/18(日) 15:01:17.97例えば行列クラスとか作ったりした時(C#だけど)
やっぱ、operatorは欲しいよ。
いちいちC = A.Multiplicat(B)って記述より
C = A * B のほうがすっきりする
ようは、実装するときにちゃんとしたコードさえ
かけば、operatorは良いと思う。
0128デフォルトの名無しさん
2011/12/18(日) 15:38:48.84Mul(inA, inB, out)
普通こう書くだろ行列でメンバがprivateなんてまずありえないしメンバ関数である必要ない
0130デフォルトの名無しさん
2011/12/18(日) 17:02:24.99Lispさんのユニークな演算子を定義できると言っても過言ではありません(要は関数なんだけどね
みたいな書式を併用できればよかったのに
0131デフォルトの名無しさん
2011/12/18(日) 17:35:46.820132デフォルトの名無しさん
2011/12/18(日) 20:55:57.560133デフォルトの名無しさん
2011/12/18(日) 23:08:11.88>C = Mul(A, B)
ダサすぎてありえないw
0134デフォルトの名無しさん
2011/12/19(月) 01:23:33.65一点だけでも演算子オーバーロードの価値がある。
0135デフォルトの名無しさん
2011/12/19(月) 08:26:00.25このへんはC++ならではだよなぁ
cout << なんかは賛否両論ありそうだけど
0136デフォルトの名無しさん
2011/12/19(月) 15:16:33.62JavaやってみるためにEclipse使ってみたら、エディタタブの右のスクロールバーの右の
キーワードのハイライトがわかりやすくて感動した。
0137デフォルトの名無しさん
2011/12/19(月) 15:21:54.950139デフォルトの名無しさん
2011/12/19(月) 17:23:14.54EcripseつかうならMinGWのが情報多いんでね?
0140デフォルトの名無しさん
2011/12/19(月) 22:50:04.941度目は適当に読み流してどんなもんか確認しただけだからかもしれなけど
ちゃんと実行確認しながら2度目で理解出来ればいいんだけど
0141デフォルトの名無しさん
2011/12/20(火) 00:42:24.58朝日新聞は一時期300人のネット工作員をかかえ、反日工作していた。
捕まった編集者は49歳ですが、こんなカスでも1500万円の年収がもらえるんですよ。
>>866
14時以降に何が起きたんだ
>>866
Domain Information: [ドメイン情報]
a. [ドメイン名] ASAHI-NP.CO.JP
e. [そしきめい] かぶしきがいしゃ あさひしんぶんしゃ
f. [組織名] 株式会社 朝日新聞社
これが規制されたからじゃねw
−「朝日新聞社は、とある思想やパラダイムに日本の世論を誘導する見返りに、中国から大量の資金を貰っている。」−
これはおそらく週刊誌さえ書けない。
「失語症躁鬱ニートは氏ねよ」【ネット】朝日新聞社員(49)ネットで荒らし行為、会社ごとアクセス規制へ
0142デフォルトの名無しさん
2011/12/20(火) 01:50:40.47Cのポインタなんかもそうだけど、最初は「そーゆーのがあるんだな」だけで良いと思うのだ
operatorなんて、一部以外はそんな多用するもんでもない気がするし。
0143デフォルトの名無しさん
2011/12/20(火) 17:40:25.85operator、始めは何この意味不明、と思ってたけど、あると確かに便利なものはあるんだ。
例えば、
ポインタを要素に含んだ構造体を複製する際、ポインタの先まで複製するってのを
a = b
って出来る。
a.clone(b)
とかでいいんだけどね。
あと、他人が書いたコードのoperatorオーバライドは意味不明。確かに要らないと感じたりもする。
0144デフォルトの名無しさん
2011/12/20(火) 17:57:08.78オプションで指定したり、クロスプラットフォームだったりするから。
http://ja.wikipedia.org/wiki/64%E3%83%93%E3%83%83%E3%83%88
を見ると、OS単位で決まってるみたいな書き方があると感じているのだけど、
OSの層とコンパイラの層があるのかな?
0145デフォルトの名無しさん
2011/12/20(火) 18:20:08.40回避策はないでしょうか。あるいはどこが記述が間違っているのでしょうか
error LNK2005: "public: static void __cdecl Hoge<int>::FuncA(void)" (?FuncA@?$Hoge@H@@SAXXZ) は既に stdafx.obj で定義されています。
error LNK2005: "public: void __thiscall Hoge<int>::FuncB(void)" (?FuncB@?$Hoge@H@@QAEXXZ) は既に stdafx.obj で定義されています。
// Hoge.h
#pragma once
template<typename T> struct Hoge {
static void FuncA();
void FuncB();
};
template<> void Hoge<int>::FuncA(){}
template<> void Hoge<int>::FuncB(){}
0146デフォルトの名無しさん
2011/12/20(火) 18:38:08.84template<> void Hoge<int>::FuncA(){}
template<> void Hoge<int>::FuncB(){}
これは実装ファイルに1箇所だけに書かなきゃだめ
リンクエラーになる
0147デフォルトの名無しさん
2011/12/20(火) 19:22:16.84ありがとうございます
ただ、なんとなく inline つけたら問題なく動いちゃいました
インライン関数はプリコンパイルしないようになっているのだろうか
0148デフォルトの名無しさん
2011/12/20(火) 21:11:08.53typedef struct {
BYTE value;
const char* name;
} STRCT;
const STRCT const_array[] = {
{1, "one"},
{3, "three"},
{5, "five"},
};
↑
これらを一緒に定義したい(ONEと1と"one"を1行で定義したい)
↓
enum {
ONE,
THREE,
FIVE
};
マクロを駆使して、同じファイルを2回#includeとかしたら出来るんですが、もっといい方法は無いものかと。
Cで無理なら、C++でも可です。
0149デフォルトの名無しさん
2011/12/20(火) 21:17:50.19static unsigned int value;
std::string name;
S(unsigned int v, std::string n) : value(v), name(n) { }
};
typedef S const SC;
static SC
ONE(1, "one"),
THREE(3, "three"),
FIVE(5, "five");
0150デフォルトの名無しさん
2011/12/20(火) 21:18:44.16struct S {
static unsigned int value;
↓
○
struct S {
unsigned int value;
0151デフォルトの名無しさん
2011/12/20(火) 21:46:35.05整数型のサイズを決めるのはコンパイラのみ。
ただし、コンパイラの設計がターゲットOSのAPIなどに
影響を受ける場合があるということ。
0152デフォルトの名無しさん
2011/12/20(火) 22:28:01.19ありがとうございます
>S(unsigned int v, std::string n) : value(v), name(n) { }
この文法、初めて見たんですが何という名前の機能になりますか?
定義してコンパイルは通ったんですが、要素にアクセスする方法が分からなくて…
0153デフォルトの名無しさん
2011/12/20(火) 23:40:38.22ONE.value, ONE.name
0154デフォルトの名無しさん
2011/12/21(水) 01:24:23.57inline 関数は定義がいっぱいあってもその内容が完全に同じならおk
0155デフォルトの名無しさん
2011/12/21(水) 01:28:28.64こんな感じでがんばれ。
http://d.hatena.ne.jp/Cryolite/20110920#p1
0156デフォルトの名無しさん
2011/12/21(水) 02:27:39.19引数が SIZEの関数があったので
func(SIZE(CX,CY));
と記述したらエラーとなりました。
SIZE size={CX,CY};
func(size); とするとOKでした。
変数を作らずに関数に値を渡すにはどう記述すればいいのでしょうか。
0157デフォルトの名無しさん
2011/12/21(水) 02:31:33.13コンパイラがC99またはC++11対応ならSIZE{CX,CY}でいけるんじゃないかな。
0158デフォルトの名無しさん
2011/12/21(水) 03:42:27.32ありがとう。動作しました。
こんな文法があるとは。
ただ、これらを配列としてアクセスしたかったりします。
printf(const_array[ONE].name);
のように。
>>149の原理が分かってないので、応用できないというか…
なにか参考URLはないでしょうか
構造体でググっても見つかりません…
01592011新作展示
2011/12/21(水) 03:44:15.42N級最高等級時計大量入荷
新品種類がそろっています。
http://baidurl.cn/4ye
http://baidurl.cn/555
http://baidurl.cn/556
http://baidurl.cn/557
http://baidurl.cn/559
0161デフォルトの名無しさん
2011/12/21(水) 08:52:44.73bool operator < (S const & a, S const & b) {
return a.value < b.value;
}
std::map<S, S> make_array(void) {
std::map<S, S> array;
array.insert(ONE, ONE);
array.insert(THREE, THREE);
attay.insert(FIVE, FIVE);
return array;
}
static std::map<S, S> const const_array = make_array();
int main(void) {
std::cout << const_array[ONE].value << std::endl;
std::cout << const_array[ONE].name << std::endl;
}
0162デフォルトの名無しさん
2011/12/21(水) 23:11:15.45解散コールは1:55から
12.19 街頭演説、国民の怒りと危機管理への不安
http://www.youtube.com/watch?v=6PQf9GvXWB0
国民に罵声を浴びせられ駅前交番に避難するテレビアカヒの取材班 12/19正午 新橋駅前
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/111219_124643_ed.jpg
,:' .l .::;',. :::;/..://:: /,':/ ', l、 .i ヽ
. ,' ..::| .::;',' :;:','フ'7フ''7/ ',.ト',_|, , ',.',
,' .::::::!'''l/!:;'/ /'゙ / '! ゙;:|:、.|、| 'l
. ,'. .:::::::{ l'.l/ 、_ _,. 'l/',|.';|
l :::::::::::';、ヾ  ̄ `‐-‐'/! ';. '
. ! :::::::::::/ `‐、 ゝ |'゙ |
| ::::::::/ \ 、_, _.,.,_ ノ::: ! 野田政権が早く終わりますように
|::::/. _rl`': 、_ ///;ト,゙;:::::./
.. `´ /\\ `i;┬:////゙l゙l ヾ/
,.:く::::::::`:、\ 〉l゙:l / !.|
. /:.:.:.:\:.:.:.:.`:、ソ/:.:| | | 19日の報道ステーション
/.:.:.:.:.:.:.:.:.:\:.:.:.:У:.:;l http://livedoor.blogimg.jp/kingcurtis/imgs/e/d/ed2dbc66.jpg
0163デフォルトの名無しさん
2011/12/22(木) 06:29:56.60int hoge(){}
}
と書いてもコンパイルエラーにならないが、
class A{
int hoge();
}
int A::hoge(){}
と書くと、「値を返さなければいけません」のようなコンパイルエラーになるのは何故ですか?
両者は同じではないですか?
0164デフォルトの名無しさん
2011/12/22(木) 06:37:16.94文句言われるけど
0165163
2011/12/22(木) 07:40:15.39ありがとうございます。
気になったらとりあえずcodepadに行ってみるのがいい感じですね。
mingwだと良く見ると警告が出ていて、
ideon、Visual C++だと警告すら出ませんでした。
警告に対する設定の違い見たいですね。。。
0166デフォルトの名無しさん
2011/12/22(木) 07:41:49.560167デフォルトの名無しさん
2011/12/22(木) 07:49:11.02class A{
private:
int ababababa(void)
{
std::cout << "hoge";
return 1;
}
};
int main()
{
A a;
a.ababababa();
std::cout << "foo";
}
単体試験をしたいのですが、ababababa(void)がprivateであるためアクセスできません。
クラスを変更せずに試験を行うことは出来ませんか?
クラスの内部にfriendを書く以外の方法があれば教えて欲しいです。
0168デフォルトの名無しさん
2011/12/22(木) 07:50:39.960169デフォルトの名無しさん
2011/12/22(木) 08:48:37.01対象のクラスのポインタをそのクラスのポインタにキャストする
0170167
2011/12/22(木) 09:41:48.72これは…。
恐ろしいものを知りました。
>名前の違う、自由に改変可能な、同じ内容のクラスを作って
ちょっと労力が大きいかも。
おふたかた、ありがとうございます。
因みに、プロの方ですか?現場でもこういったことをするのですか?
0171デフォルトの名無しさん
2011/12/22(木) 09:43:46.66!
呼ばれなければコンパイルされないのか…。
ありがとうございます。
0172デフォルトの名無しさん
2011/12/22(木) 09:47:35.110173デフォルトの名無しさん
2011/12/22(木) 10:47:13.94背筋が凍った
0174デフォルトの名無しさん
2011/12/22(木) 11:56:21.380175デフォルトの名無しさん
2011/12/22(木) 12:18:10.65テストをした方が良いと思うんだが。
0176デフォルトの名無しさん
2011/12/22(木) 14:39:19.81呼ばれないメンバ関数をコンパイルしない代表は、VC++。
他人が使うクラスを作るときは要注意。
0177デフォルトの名無しさん
2011/12/22(木) 16:14:40.38実例よろ
0178デフォルトの名無しさん
2011/12/22(木) 16:31:36.66前者はインライン関数。
インライン関数は一部は一部文法チェックされるようだけど、
呼ばれなければ、returnがなくても怒られないね。
バイナリには含まれないから問題ない。
後者はインライン関数ではないので
呼ばれなくてもバイナリに含まれるから
returnがなければ怒られる。
よって両者は異なる。
0179デフォルトの名無しさん
2011/12/22(木) 22:37:11.150180デフォルトの名無しさん
2011/12/22(木) 22:46:22.31インライン関数のマージ作業に意味解析済みである必要は無いというかそもそも無駄なんだから
0181デフォルトの名無しさん
2011/12/22(木) 22:54:10.81リリースモードならともかく、デバッグモードではちゃんとコンパイルエラーを出して欲しい。
DEFCON^h^h^h^h^h^h警告レベル4でもでなのかしら? …実験してみるかな。
0182デフォルトの名無しさん
2011/12/22(木) 23:02:13.290183デフォルトの名無しさん
2011/12/22(木) 23:53:24.85なんと!
クラス宣言の中に書いてしまうとインライン扱いになるということ?
警告してくれるようなオプションってないのかな?
後で邪魔になっても困る人もいるのでは?
0184デフォルトの名無しさん
2011/12/23(金) 01:09:32.25/::::::::::::::::::::::::::::::;;::ノ ヽ;::\
/::::::::;;;;;;;;;,,,;;...-‐''"~ ヽ:;::l
|:::::::::::| 岡田 異音 |ミ|
|:::::::/ ,,, ヽ,、 '|ミ|
'|:::::::l '''"" ゙゙゙゙` |ミ|
|:::::|. ,,r ‐、 ,, - 、 |/
,/⌒| ノ ・ _), (. ・ `つ|
| ( "''''" |"'''''" |
ヽ,,. ヽ |
| ^-^_,, -、 |
| _,, --‐''~ ) | マニフェストもう守れない。どうしよう・・・・
'ヽ ( ,r''''''‐-‐′ /
震災後
|:::::::::/ |ミ|
|::::::::| ,,,,, ,,,,, |ミ|
|彡|. '''"""'' ''"""'' |/
/⌒| -=・=‐, =・=- |
| ( "''''" | "''''" |
.ヽ,, ヽ .| キリッ
| ^-^ |
. | ‐-===- | 大震災が起こったのだからマニフェストの破綻も致し方ありません
,\. "'''''''" /
朝鮮民主党
解党
0185デフォルトの名無しさん
2011/12/23(金) 08:52:29.38「WSAStartup()」と対になって、
初期化・開放 のようなものかと思っていたのですが、
調べてみると、
「WSAStartup()」はメモリを取得するが、
「WSACleanup()」をしても開放しないので、そのうちヒープか何かが無くなって落ちると知りました。
0186デフォルトの名無しさん
2011/12/23(金) 09:00:06.220187デフォルトの名無しさん
2011/12/23(金) 12:32:56.69std::ofstream out("test.txt", std::ios::out | std::ios::binary);
double num = 100.45;
out.write((char *) &num, sizeof(double));
の(char *) &numって何で&numなんですか?
0188デフォルトの名無しさん
2011/12/23(金) 12:38:00.47事故解決しました
0189デフォルトの名無しさん
2011/12/23(金) 13:14:39.78プロセス中で複数回呼ぶのはNGで、
プロセスが終了したら開放されるのであれば、
「WSACleanup()」しなくてもいいってことにならないのでしょうか?
もうひとつお願いします。
ソケットが使える常態かそうではないかはどのように確認できますか?
WSARecv()などで受信してみないとわからないでしょうか?
0190デフォルトの名無しさん
2011/12/24(土) 07:15:28.99Visual C++では、警告:C4251 が示されます。
privateとして利用している場合は、OKなのでしょうか、NGなのでしょうか。
インタフェースとして利用している場合は、std::mapの実装が異なる可能性があるのでNGというのは、なんとなくわかるのですが、
内部で利用するだけであれば問題がある理由がわからないです。
inlineを利用してアクセスするのがNGというのも良くわからないです。
この件では、ヘッダの内容を全てcpp側にコピーしても同じ警告が出ます。どうしてなのでしょうか?
コンパイラがインタフェースに利用されているか判断するのが困難だからでしょうか?
「class 'std::map<_Kty,_Ty>' は __export キーワードを使って class 'info::driver::InetPromiscuousDriver' にエクスポートしてください。」
とは、どこの何に対して、__exportを追記するとエクスポートできるのでしょうか?
エスパー出来れば、この辺りについて教えてください。
0191デフォルトの名無しさん
2011/12/24(土) 08:48:18.60で奇麗に整形されたソースになると思ったら
とんでもない壊れたものしか出力されない
何かオプションでもいるの?
0192片山博文MZ ◆0lBZNi.Q7evd
2011/12/24(土) 10:22:48.99http://www.6809.net/tenk/html/lib/doc/astyle_j.htm
0193デフォルトの名無しさん
2011/12/24(土) 17:43:03.67private メンバもクラスのサイズに影響する。
inline でアクセスしてたらDLL内外で実装の異なる map アクセスが展開される可能性がある。
0194デフォルトの名無しさん
2011/12/24(土) 22:55:08.76めんどくさくなってきたから全部doubleにしてしまいたい
0195デフォルトの名無しさん
2011/12/24(土) 23:10:57.90>1/2*2
0
>1.0/2.0*2.0
1.000000
0196デフォルトの名無しさん
2011/12/24(土) 23:20:24.96>めんどくさくなってきたから全部doubleにしてしまいたい
すれば?
余計面倒なことになると思うが。
0197デフォルトの名無しさん
2011/12/25(日) 00:38:18.530198デフォルトの名無しさん
2011/12/25(日) 00:39:23.250199デフォルトの名無しさん
2011/12/25(日) 00:44:23.33[]を小数点切り捨てとすると
[a/n + b/n]
[a/n] + [b/n]
は異なる。
0200デフォルトの名無しさん
2011/12/25(日) 00:54:18.15世も末だなw
0201デフォルトの名無しさん
2011/12/25(日) 02:57:13.99double i;
for(i=0;i<1;i+=0.01)printf("%f ",i);
と
int i;
for(i=0;i<100;i++)printf("%f ",(double)i/100.0);
とは違うことがある。
0202デフォルトの名無しさん
2011/12/25(日) 03:48:17.300203デフォルトの名無しさん
2011/12/25(日) 13:54:45.42実数でループできるように言語仕様を変えるべきでは?
0204デフォルトの名無しさん
2011/12/25(日) 14:00:55.120205デフォルトの名無しさん
2011/12/25(日) 14:06:30.240206デフォルトの名無しさん
2011/12/25(日) 14:24:16.46マシーンで計算精度が異なる。
整数型であればズレが出ない。
0207デフォルトの名無しさん
2011/12/25(日) 15:16:35.680208デフォルトの名無しさん
2011/12/25(日) 18:36:46.52コード・ソースを晒せば早いかもしれませんが、はじめのうちはなかなか勇気がでないかもしれません。
0210デフォルトの名無しさん
2011/12/25(日) 23:20:09.77糞コードを晒す厚顔無恥さは勇気とは言わないけどな
具体的に
0212デフォルトの名無しさん
2011/12/25(日) 23:39:55.690213デフォルトの名無しさん
2011/12/25(日) 23:44:05.64糞コードを改善する答えやヒントを人に与えることができる人間以外は必要ありません
0214デフォルトの名無しさん
2011/12/25(日) 23:56:37.990215デフォルトの名無しさん
2011/12/26(月) 22:56:39.860216デフォルトの名無しさん
2011/12/27(火) 00:10:20.44intと暗黙で相互変換可能なクラスを作ればそれですむ。
厳密な意味での整数型が作りたければコンパイラに手を入れる必要がある。
0217デフォルトの名無しさん
2011/12/27(火) 00:59:27.390218デフォルトの名無しさん
2011/12/27(火) 11:09:05.80少ないビット幅しか使えないなら配列で多倍長数を表現する。
ハードウェアの対応でないから演算速度は落ちる。
0219デフォルトの名無しさん
2011/12/27(火) 14:44:51.44vector<auto_ptr<Hoge> > hoge_pointers(num, NULL);
for (int i = 0; i < num; i++) { hoge_pointers[i].reset(new Hoge); }
// pushするループで例外を投げたくないから、先行してhoge_userの内部にメモリを確保する
hoge_user.reserve(hoge_pointers.size());
// pushされた時点からポインタはhoge_userが管理する
for (int i = 0; i < num; i++) { hoge_user.push(hoge_pointers[i].release()); }
こんな感じで、hoge_userの外でHogeインスタンスをたくさん作成してから
hoge_userにポインタを渡したいんですが、どういう風にすればいいでしょうか
例外が起こった場合には、hoge_pointersがすべて解放されて、
hoge_userにpushされたポインタはすべてなかったことにしたいです
で、スマポを使おうと思ったのですが、auto_ptrはSTLのvectorに突っ込めなくて、
boost::shared_ptrはポインタを取り出すことができないのでやめました
try/catch 使えって話ですが、なにか他にいい解決策はありますか?
0220デフォルトの名無しさん
2011/12/27(火) 15:20:55.13コンテナにauto_ptrを入れる行為はCOAPと呼ばれ厳禁
Effective STLを読め
0221デフォルトの名無しさん
2011/12/27(火) 15:25:10.76vector<Hoge *> v;
try {
v.reserve(N);
for(int i(0); i != N; ++i) {
v.push_back(new Hoge);
}
}
catch(...) {
int n(v.size());
for(int i(0); i != n; ++i) {
delete v[i] ;
}
throw ;
}
どうしてもtry/catchが嫌ならcatchブロックの部分をデストラクタで実行するクラスを作ってvのアドレスをもたせればいい
0222デフォルトの名無しさん
2011/12/27(火) 15:59:34.02意地でもtry/catchを使いたくないので、そちらのコードを参考にしてクラスを自作したいと思います
0223デフォルトの名無しさん
2011/12/27(火) 18:41:37.49public ref struct A {
array<int> a;
A() {
a = gcnew array<int>(10);
}
~A(){
delete a;
}
};
A^ s = gcnew A();
delete s;
で~A()が呼び出されて内部のリソースも削除される?
0224デフォルトの名無しさん
2011/12/27(火) 19:09:14.58節子それC++やない、C++/CLIや
0225デフォルトの名無しさん
2011/12/27(火) 19:32:32.67すいません
0226デフォルトの名無しさん
2011/12/27(火) 21:00:27.48とりあえずスレ一覧をCLIで検索してみれ。
0227デフォルトの名無しさん
2011/12/28(水) 00:12:20.49プリミティブ型の値をvectorに大量に一括設定する際、vector::assign以上に高速に
設定する方法はないでしょうか?
VC++2010を使っています。
0228227
2011/12/28(水) 00:24:38.84vector等のSTLのコンテナを含む静的ライブラリ(型を限定してコンパイルした上で提供)を作成しているのですが、
Debug版の遅さに我慢できません(VC++2010)。
ライブラリのリリースでは内部実装がDebug版である必要はないため、
Debugビルド向けにもReleaseでビルドして提供したいと考えています。
しかし、イテレータデバッグレベルがどうのこうのっていうエラーが発生してしまいます。
なんとか回避する方法はないでしょうか?
0229デフォルトの名無しさん
2011/12/28(水) 01:30:39.39たぶん無いね。あっても大差無いだろう。
>>228
_SECURE_SCL の設定で片付くんじゃないの?
http://msdn.microsoft.com/ja-jp/library/aa985965.aspx
あと、エラーメッセージは正確にね。
0230227
2011/12/28(水) 03:28:57.27ありがとうございます。
_SECURE_SCLについてはやってみましたが、プロジェクト全体で同じ値に設定しないとダメなようです。
Debugのプロジェクトは
利用者側 ... デバッグ作業がしたいので_SECURE_SCL=1にしたい
ライブラリ側 ... デバッグは済んでいて高速に処理したいので_SECURE_SCL=0にしたい
としたいのですが、下のLNK2038と同じエラーになってしいます。
> あと、エラーメッセージは正確にね。
申し訳ありません。
手元に環境がないため、ググッた結果になりますが、
error LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました。
だと思います。
自前のクラスを作って置き換えるか、より高速なSTLの実装があれば、それを使うというのもありなのかもしれませんが…。
0231デフォルトの名無しさん
2011/12/28(水) 09:16:58.000232デフォルトの名無しさん
2011/12/28(水) 10:50:07.41速くしたければリリース使う。
0233227
2011/12/28(水) 21:10:53.96227に関しては早くなるかもしれませんね。
でも、今はなくなってしまったようです。
VC++2008のalgorithm
http://msdn.microsoft.com/en-us/library/chzkfc23%28v=VS.90%29.aspx
VC++2010のalgorithm
http://msdn.microsoft.com/en-us/library/chzkfc23%28v=VS.100%29.aspx
make_checked_iteratorは残っていますが、これを使ってstd::copyしても、内部で
_DEBUG_RANGE
_DEBUG_POINTER
が呼ばれた後、ようやくコピー処理が走るようになってるようです。
>>232
それが、我慢出来ないくらい遅いんですよ。
ソースコードデバッグを開始すると数分反応が帰って来ませんし。
0234デフォルトの名無しさん
2011/12/28(水) 21:15:11.47そういうのじゃないよね?
0235デフォルトの名無しさん
2011/12/28(水) 21:27:54.730236デフォルトの名無しさん
2011/12/28(水) 21:29:53.57SECURE_SCLのせいでatも[]も変わらなくなってるよ
最初に気がついたときは怒りで発狂するかと思ったw
ありなしでDLLまたげないしね
ほんと面倒だわ
>>233
うちもけっこうでかいプログラム作ってるけどSECUrE_SCLをOFFにしてDebug版は素直に使ってる
ただ、デバッグ実行じゃなくてexeを直に叩いて立ち上げてからアタッチしたほうが
結構速い気がするのでそっちを使ってる
0238227
2011/12/28(水) 21:45:42.75reserveして設定も試しています。
[]で設定する他、生ポインタに変換して設定したり、OpenMPを使ってみたりしてみましたが…、
assignの方が早かったです。
どうも、reserveも要素ごとに配置newが発生したり、_DEBUG_RANGEなどが走ったりしているようで、
値の設定分、遅くなってしまうようです。
>>236
立ち上がってアタッチってのはたしかに有用かもしれませんね。
ありがとうございます。
0239デフォルトの名無しさん
2011/12/28(水) 21:52:35.700240227
2011/12/28(水) 23:13:13.60ソースは手元に無いので、覚えている範囲で似たようなコードを書きました。
あと、うちにあるのはExpressなので、OpenMPが動くかどうかは不明です。
http://codepad.org/kqZndGzg
ちなみに >>238 はreserveではなくて、resizeでした。
申し訳ありません。
reserveも試してはいますが、assignの方が早かったと思います。
0241デフォルトの名無しさん
2011/12/29(木) 01:07:24.97この際だからmemcpyでいいんじゃねというくらいしかまともな方法は思いつかない
boost::container::vectorとか使って望む結果になるかどうかも試したことないからわからないな
0242デフォルトの名無しさん
2011/12/29(木) 04:03:07.90という関数に渡された引数が &hoge[1]だった場合、
関数の中ではhoge[0]はarg[-1]という表現でいいんですか?
0244デフォルトの名無しさん
2011/12/29(木) 08:20:41.31Header <boost/container/container_fwd.hpp>
Header <boost/container/deque.hpp>
Header <boost/container/flat_map.hpp>
Header <boost/container/flat_set.hpp>
Header <boost/container/list.hpp>
Header <boost/container/map.hpp>
Header <boost/container/set.hpp>
Header <boost/container/slist.hpp>
Header <boost/container/stable_vector.hpp>
Header <boost/container/string.hpp>
Header <boost/container/vector.hpp>
ひと通りどんな内容なのか目を通しておくとよい
boostは今や膨大な内容になっていてとても全部目を通すのは不可能に
近くなってきたから興味のある所だけでも見ておこう
0245デフォルトの名無しさん
2011/12/29(木) 08:29:02.28これ使うやつはアホウだ。
0246デフォルトの名無しさん
2011/12/29(木) 08:31:19.60有名なライブラリがあったりtimerなど3行程度で自作できるだろ。
バージョン違いで動作が変わる可能性あるし、インクルードするやつはアホウ。
0247デフォルトの名無しさん
2011/12/29(木) 08:37:09.53ソースコードを張ったり公開するところでboostはダメだな。
0248デフォルトの名無しさん
2011/12/29(木) 11:24:02.760249デフォルトの名無しさん
2011/12/29(木) 13:11:43.53STLを使っとけばスコープ外れたら自動で解放するだろ。
どうやってnewの使用が回避出来なかったら手動で開放しろよ。
もしくはデストラクタに組み込めよ。そしたらいらん。
0250デフォルトの名無しさん
2011/12/29(木) 13:59:55.29使ってもみないでただ批判ばかりしてる
0251デフォルトの名無しさん
2011/12/29(木) 14:33:10.27>デストラクタに組み込めよ
これを毎回書くのがだるいからスマポ使うんだろ
0252デフォルトの名無しさん
2011/12/29(木) 14:33:12.78boostが優れている所なんてないだろ。
使う意味なし。
0253デフォルトの名無しさん
2011/12/29(木) 14:37:06.06真性なのだろうか
0254デフォルトの名無しさん
2011/12/29(木) 14:46:40.93標準の std::unique_ptr と std::shared_ptr で十分だよな
0255デフォルトの名無しさん
2011/12/29(木) 14:51:34.14スマートポイント使うんだったら、C#とかPHPとかBASICとか自動で開放するやつつかえよ。
0256デフォルトの名無しさん
2011/12/29(木) 15:03:08.22パフォーマンス犠牲にして楽したいなら他の言語だよな
0257デフォルトの名無しさん
2011/12/29(木) 15:08:46.98学生プログラマ日本一決定戦(予選は社会人も参加可)
ttp://codevs.jp/howto.html
現在予選開催中
応募締切 2012.1.6 12:00
おもしろいことやっているじゃん。誰か今から参加しろよ。
0258デフォルトの名無しさん
2011/12/29(木) 16:04:27.15unique_ptr は速度低下しないだろ。
0259デフォルトの名無しさん
2011/12/29(木) 16:08:33.62右辺値最高やわ
0260デフォルトの名無しさん
2011/12/29(木) 18:39:50.46C++スレで他言語持ち出すバカなんだから察してあげなよ
0261デフォルトの名無しさん
2011/12/29(木) 23:29:53.46http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1111063861
の回答のようなクラスを作ろうと思うのですが、
このクラスで作る配列を静的に初期化したいのですが、できますか?
static int hoge[] = {0,2,4,5,};みたいな感じで扱いたいです。
0262デフォルトの名無しさん
2011/12/29(木) 23:45:38.950263デフォルトの名無しさん
2011/12/29(木) 23:49:28.42T elements[N];
// コンストラクタデストラクタは書かない
T & operator [] (unsigned int n) {
if(n < N) return elements[n] else throw out_of_range("out_of_range");
}
// 以下略
} ;
たぶんこれでいけると思うよ
0264デフォルトの名無しさん
2011/12/30(金) 00:15:22.35>>263
operator[]はメンバー関数である必要があります っていわれました。
環境は、VC2010です
0265デフォルトの名無しさん
2011/12/30(金) 01:09:07.12size N を明示的に書かなくても使えますか?
0266デフォルトの名無しさん
2011/12/30(金) 01:42:55.10でもVC10なら自分で書かずともstd::arrayで範囲チェックできるだろ
0267デフォルトの名無しさん
2011/12/30(金) 01:58:25.77民主党 大阪市民
自民党 ν速民
共産党
財界
関西電力
連合
自治労
日教組
公務員
毎日新聞
MBS
解同
極左
大阪の敵が濃縮されてわかりやすくなったな
0268265
2011/12/30(金) 12:04:10.90template <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};
}
みたいにすると、
コンパイルされたクラスの テンプレート のインスタンス化 の参照を確認してください
といわれコンパイル通らないのはなぜでしょうか?
0269デフォルトの名無しさん
2011/12/30(金) 12:16:50.18□使用可能なライブラリ
stl / boost / zlib / ライセンスがうるさくないものであればその他もOK
□やりたいこと
zipファイルの中身(主にファイル名)を列挙したいです。
その時に、なるべくwchar_tベースでの書庫ファイル指定や、ファイル名取得をしたいです。
zlib + minizip だと、char文字列でのやり取りしかできないように思います。
□質問
どんなライブラリをどういう感じで使うと実現できますでしょうか。
よろしくお願いいたします。
0270デフォルトの名無しさん
2011/12/30(金) 12:23:41.34ユニコードで格納された物はユニコードで取り出せる。
取り出しかたの問題ではないから工夫しても無理。
0271デフォルトの名無しさん
2011/12/30(金) 12:28:04.940272デフォルトの名無しさん
2011/12/30(金) 13:03:50.87zip読み取りルーチンとは関係なし。
UTF-16LEで格納されていればそのまま格納すれば良い。
格納時のエンコードの問題。
0273デフォルトの名無しさん
2011/12/30(金) 13:13:05.57基底クラスのメンバーをコピーするのはどうやって記述すればいいんでしょうか?
class NewClass : public OldClass
{
public
int mNewMenber;
...
NewClass operator=(NewClass &nc){
/* 基底クラスのメンバーをコピー */
????????????????
mNewMember = nc.mNewMember;
return *this;
}
0274273
2011/12/30(金) 13:15:57.840275デフォルトの名無しさん
2011/12/30(金) 13:27:13.08OldClass::operator = (other);
mNewMember = other.mNewMember;
return *this;
}
0276デフォルトの名無しさん
2011/12/30(金) 13:41:19.18std::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' : オーバーロード関数の呼び出しを解決することができません。
};
0277デフォルトの名無しさん
2011/12/30(金) 14:15:17.84> みたいにすると、
> コンパイルされたクラスの テンプレート のインスタンス化 の参照を確認してください
>
> といわれコンパイル通らないのはなぜでしょうか?
初期化子の書き方。
テンプレートを使っててもユーザー定義のコンストラクタをもたないクラスの初期化のやり方はかわらない。
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;
}
0278デフォルトの名無しさん
2011/12/30(金) 14:23:28.26簡単な方法はありませんか?
ifで括るとかだとちょっと長いんで・・・
while(i<max)
{
bool bool_is =hogehoge();
if(!bool)
{
i++;
以下の行を読まずにwhileの先頭に戻りたい。
}
etcetra....
i++;
}
0279デフォルトの名無しさん
2011/12/30(金) 14:26:08.900280デフォルトの名無しさん
2011/12/30(金) 14:41:22.84なるほど。では実際にこの配列を初期化して使うにはどうしたらよいのでしょう?
0281デフォルトの名無しさん
2011/12/30(金) 15:13:29.19新しめのコンパイラを使うといい
g++なら-std=c++0x
0282デフォルトの名無しさん
2011/12/30(金) 15:25:39.65ヒント
>>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];
};
0283デフォルトの名無しさん
2011/12/30(金) 15:28:06.42class Cスペシャルのswapをstdでなくclass Cと同じ名前空間(だけ)に置く。
0284281
2011/12/30(金) 16:18:11.57すまん、よく読んだらバージョン関係ないな
>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");
セミコロンが抜けてるだけかと。
0285デフォルトの名無しさん
2011/12/30(金) 16:59:46.80動きは前進、後退、その場での方向転換をキー操作で行いたいです
戦車自体が方向転換しても次に前進しようとした時に、ワールド座標系のX軸の向きに進むため
戦車が横滑りしてる感じになってしまいます
うまく移動→方向転換→移動をを実現するにはどうしたらいいでしょうか
0286デフォルトの名無しさん
2011/12/30(金) 17:07:56.550287デフォルトの名無しさん
2011/12/30(金) 17:08:15.370288デフォルトの名無しさん
2011/12/30(金) 17:10:33.850289デフォルトの名無しさん
2011/12/30(金) 17:12:28.23cosθ、sinθであらわせるはずだろ。
0290デフォルトの名無しさん
2011/12/30(金) 17:16:10.66難解な物理法則や、戦車特有の挙動などが関与してるのか?
0291デフォルトの名無しさん
2011/12/30(金) 17:22:54.86あー、戦車のローカル座標のX軸に進めることしか考えてなかったです
現在の向きから計算してやればいいのか
ありがとうございます、やってみます
0292デフォルトの名無しさん
2011/12/30(金) 18:39:35.50やっぱりわかりません
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が更新されたときに現在の回転の角度が入ります
原点から 方向転回→前進→方向転換 までできるんですけど
その後前進しようとすると、再び原点から方向転換した方向へ進み始めてしまいます
現在の位置を考慮しないといけないと思うのですが、うまく実装できません…
0293デフォルトの名無しさん
2011/12/30(金) 19:05:03.70戦車のモデルが +z を向いていて、Y軸回転がθだとすると、
戦車の方向ベクトルは(sinθ, 0, cosθ)となり
方向ベクトル*速度 * 経過時間 = 移動ベクトル
別な考え方では
戦車の向きベクトル = 戦車のワールド行列 * ベクトル(0, 0, 1)
あとは同様
戦車の位置+移動ベクトル=新しい位置
0294デフォルトの名無しさん
2011/12/30(金) 19:31:07.28朝日新聞は一時期300人のネット工作員をかかえ、反日工作していた。
捕まった編集者は49歳ですが、こんなカスでも1500万円の年収がもらえるんですよ。
Domain Information: [ドメイン情報]
a. [ドメイン名] ASAHI-NP.CO.JP
e. [そしきめい] かぶしきがいしゃ あさひしんぶんしゃ
f. [組織名] 株式会社 朝日新聞社
−「朝日新聞社は、とある思想やパラダイムに日本の世論を誘導する見返りに、中国から大量の資金を貰っている。」−
これはおそらく週刊誌さえ書けない。
「失語症躁鬱ニートは氏ねよ」【ネット】朝日新聞社員(49)ネットで荒らし行為、会社ごとアクセス規制へ 09.3
0295デフォルトの名無しさん
2011/12/30(金) 20:16:30.63戦車の頭のある位置 - 戦車の中心 = 戦車を中心を0とした時の方位ベクトル
方位ベクトルを正規化して x+y+z=1.0になるようにする
何故なら最大推力が1.0だから
そしたら今度は移動速度をそのベクトルに掛けて
戦車の中心座標に結果を加算する
0296デフォルトの名無しさん
2011/12/30(金) 21:36:15.20【東京都渋谷区】 12/31(土) 年忘れしてはならない!紅白さくら祭 みんなで「韓流紅白」をぶっ飛ばせ!
年忘れしてはならない!紅白さくら祭 みんなで「韓流紅白」をぶっ飛ばせ!
12時00分 渋谷駅ハチ公前広場 「街頭演説」(〜13時30分)
13時30分 移動
14時00分 渋谷公会堂前 「街頭演説」(〜14時45分)
15時00分 代々木公園・NHK横「イベント広場」
「年忘れしてはならない!紅白桜祭」
抗議集会・コンサート・炊き出し等々
盛りだくさんでお送りします!(〜21時00分)
0297デフォルトの名無しさん
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になると思うのですがなにか思い違いをしてるのでしょうか
0298デフォルトの名無しさん
2011/12/30(金) 23:31:16.400299297
2011/12/30(金) 23:34:57.26ヌル文字も数えろとのことですか、ぐぬぬ
0300デフォルトの名無しさん
2011/12/30(金) 23:51:08.090301デフォルトの名無しさん
2011/12/30(金) 23:53:11.73引数キャスト (char) してもだめ
0302デフォルトの名無しさん
2011/12/31(土) 00:10:22.70それも試しましたが、やはり名前の衝突は避けられず・・
結局自前のswapの名前を変えることで対応しました
なんかC++の限界を感じた・・どうもありがとうございました
0303デフォルトの名無しさん
2011/12/31(土) 00:26:47.110304297
2011/12/31(土) 00:31:45.74とかなんとなく思った
0305デフォルトの名無しさん
2011/12/31(土) 00:54:14.970306297
2011/12/31(土) 00:57:19.48エラーが出なくなった時、人は優しくなれる
0307デフォルトの名無しさん
2011/12/31(土) 09:25:35.25これで 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;
}
0308デフォルトの名無しさん
2011/12/31(土) 17:24:15.70http://cp2.uh-oh.jp/read_img/index/ab83e09400ff17d99f45ceee15a37e09.jpg
http://cp2.uh-oh.jp/read_img/index/a58c2ddc9cdbe45529ef0d58c95cc232.jpg
テレビに騙されるな(自称街の人-台本読んでるだけの業者)
0309デフォルトの名無しさん
2012/01/01(日) 02:44:43.53{
public:
int *count;
};
Hoge hoge =new Hoge[x];
こういう配列を作るとxの値によっては作った瞬間にエラーになってしまう場合があるのは何故ですか?
回避策はありませんか?
0310デフォルトの名無しさん
2012/01/01(日) 02:45:47.14の書き間違いです。
0311デフォルトの名無しさん
2012/01/01(日) 02:56:43.17なんで、エラーの内容を書こうと思わないんだろう…
お前がバカだからという回答でも期待してるのか?
0312デフォルトの名無しさん
2012/01/01(日) 02:57:28.18Hoge *hoge = new Hoge[x];
} catch (std::bad_alloc &e) {
std::cerr << e.what() << std::endl;
}
0313デフォルトの名無しさん
2012/01/01(日) 04:22:28.690314デフォルトの名無しさん
2012/01/01(日) 10:47:15.57K-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階も後列は空席だらけと、さんざんな結果に終わった。
http://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
開演前
http://cdn-ak.f.st-hatena.com/images/fotolife/u/ukiukineko/20111224/20111224221655.jpg
http://cdn-ak.f.st-hatena.com/images/fotolife/u/ukiukineko/20111224/20111224221654.jpg
開演中
http://cdn-ak.f.st-hatena.com/images/fotolife/u/ukiukineko/20111224/20111224222054.jpg
補助金が尽きてガラガーラ テレビは捏造演出装置
0315デフォルトの名無しさん
2012/01/01(日) 22:06:09.92引数として渡すときはわざわざ呼び出し側で f(std::move(p)) とするのが普通なのでしょうか?
それとも、
void f(std::unique_ptr<Hoge>& p)
{
std::unique_ptr<Hoge> p_ = std::move(p);
}
とした方がいいのでしょうか?
この場合はどっちでもいいような気がするのですが、p_をクラスのメンバとするときに
呼び出し側にstd::moveを意識させた方がいいのかそれは冗長なのか教えてください。
0316デフォルトの名無しさん
2012/01/01(日) 22:10:02.980317デフォルトの名無しさん
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の方が
いいような気もしています。
0318デフォルトの名無しさん
2012/01/01(日) 22:24:27.04{
public:
std::unique_ptr<Hoge> p_;
Hage(std::unique_ptr<Hoge>&& p) : p_(std::move(p)) { }
};
所有権を移動させるなら
俺ならこうする
0319デフォルトの名無しさん
2012/01/01(日) 22:44:57.900320デフォルトの名無しさん
2012/01/02(月) 03:12:05.20auto_ptrを踏襲するならこれでもいいだろうが
どちらにしろ>>317はないな
0321デフォルトの名無しさん
2012/01/02(月) 17:15:58.390322デフォルトの名無しさん
2012/01/03(火) 00:30:28.40extern int hoge[];
hoge.cpp内
int hoge[] = {0,1,2,3,4};
として、
main.cpp内で
int size = sizeof(hoge)/sizeof(hoge[0]);として配列の要素数を求めたいのですが、
これが使えません。
初期時に要素数を指定しないのはそのままにmain.cppで配列の要素数を求める方法を
教えてください、
0323デフォルトの名無しさん
2012/01/03(火) 00:32:39.730324デフォルトの名無しさん
2012/01/03(火) 00:36:00.920325デフォルトの名無しさん
2012/01/03(火) 00:39:55.690326デフォルトの名無しさん
2012/01/03(火) 00:51:40.590327デフォルトの名無しさん
2012/01/03(火) 01:04:17.85要素数求めるなら、分母はhoge[0]の方がよくね?
0328デフォルトの名無しさん
2012/01/03(火) 01:06:51.78察しろよ
0329デフォルトの名無しさん
2012/01/03(火) 18:12:10.00// hoge.h
extern int const yousosuu;
// hoge.cpp
extern int const yousosuu = sizeof(...
0330デフォルトの名無しさん
2012/01/04(水) 23:54:07.38ウィンドウを一つしか用意できない「っぽい」んですよね。
今回の例に限らず(というかこの例はイケてないかな)、
『グローバル変数を利用するスレッドセーフではない』ライブラリを、
複数箇所から安全に利用する方法として、
使いたい人がサンドボックス的な他に影響を及ぼさない場所を用意して、
その中にライブラリを展開して、
サンドボックス名.普通の使い方、とか、サンドボックス名::普通の使い方、みたいなことって出来ませんか?
今現在あるネーム空間を無理やり他のネーム空間に突っ込む、ということが出来れば解決なのですけど。
接頭を付加できるって聞いたことないし、試してみてもうまくいかないっぽい。
言いたいことを書けているかな…。日本語が不自由で申し訳ない。
0331デフォルトの名無しさん
2012/01/05(木) 02:11:48.57Javaスレでも質問したのですけど、↑についてお願いできますか?
C++の場合はどうなのでしょうか?
0332デフォルトの名無しさん
2012/01/05(木) 02:41:57.09コンパイラにもよる
0333デフォルトの名無しさん
2012/01/05(木) 09:04:05.51ライブラリをDLLでビルドして適当なnamespace内の関数ポインタに各種関数をロード
0334331
2012/01/05(木) 13:12:32.62ありがとうございます。
もう一件、Javaも知っている方とかに聞きたいのですけど、
C++の名前空間とJavaのパッケージとの違いですが、
・名前空間には直接変数を宣言できる
・protectedについて、Javaは同一パッケージでpublic、C++は同一名前空間でも継承が無いとprivate
みたいな感じで、ほとんど同じと考えていいのでしょうか?
C++もJavaもあまりわかってないのですが…。
0335デフォルトの名無しさん
2012/01/05(木) 15:10:56.67Javaの場合は同じなんじゃないの。
C++はデストラクタの挙動がちがってくると思うけど。
0336デフォルトの名無しさん
2012/01/06(金) 06:45:15.80javac 1.6.0_26 で確認したら全く同じになった
C++の方も一応説明すると
Object hoge;
引数無しのコンストラクタ呼び出し
hoge = ...;
代入演算子の呼び出し
Object hoge = ...;
... を引数としたコンストラクタ呼び出し
になるから、実装による
0337デフォルトの名無しさん
2012/01/07(土) 17:37:13.94アプリも作成できるようになり、今はC#で色々
作ったりしてるんですが、あらためて疑問に思うのは
C++のstd::endlってどういう利便性があるのでしょうか?
いっつも、"\n"で終わらしてたんですが
end lineの略なんだろうけど、いまだにわかりません。
教えてください。
0338デフォルトの名無しさん
2012/01/07(土) 18:11:55.44が、たいていの環境は行バッファリングなんで改行すればフラッシュされるので違いが見えなくなる
0339デフォルトの名無しさん
2012/01/07(土) 19:51:12.89最近Javaを学んでいたので、ついうっかり↑の書き方をしたら特に問題なく動きました。
C++的にこの書き方はありでOKですか?
B* b = new C;って書くのが筋で、止めた方がいいとかあります?むしろ()付がいい?
過去に、C c()って書くと関数の宣言にされるのを知らずに凄く悩んで、引数なしの場合は()をつけないものと思ってたのですが。
new C と書こうが、new C() と書こうが、Cの文法には触れないのでどっちでもいいのかな。
むしろ、C c()が無理なのは、Cを引きずってるからなのかな。
日本語に出来てるか心配ですが、エスパーしてもらってもいいですか?
0340デフォルトの名無しさん
2012/01/07(土) 19:54:16.610341デフォルトの名無しさん
2012/01/07(土) 19:56:29.290342デフォルトの名無しさん
2012/01/07(土) 19:57:08.470343デフォルトの名無しさん
2012/01/07(土) 20:04:28.62B * p(new B());
と書くのが唯一の正解だ
0344デフォルトの名無しさん
2012/01/07(土) 20:05:18.80どっちでも一緒じゃん
0345デフォルトの名無しさん
2012/01/07(土) 20:18:02.660346デフォルトの名無しさん
2012/01/07(土) 20:21:11.18int a(1);とか書いてるのか
バカなやつだ
0347デフォルトの名無しさん
2012/01/07(土) 20:30:30.13普通そう書くよ
hoge h(aaa);
int i = 999;
こういうふうに混在してたら見た目悪いだろ
0348デフォルトの名無しさん
2012/01/07(土) 22:22:31.10Hogeクラスのオブジェクトkusohogeを初期化値1で生成するとき、
Hoge kusohoge(1);
以外に書き方があるのか?
0349デフォルトの名無しさん
2012/01/07(土) 22:25:00.240350デフォルトの名無しさん
2012/01/07(土) 22:26:53.08hoge.Init(1);
0351デフォルトの名無しさん
2012/01/07(土) 22:36:05.61>>349
言語使用上、(と{が区別なく使えるってことか?
それとも、
Hoge kusohoge(1);
Hoge kusohoge{1};
は、言語仕様上も違い意味になるのだが、この場合に限っては
結果が同じになるという意味?
>>350
たしかに、これはあるな
むしろ、順当な書き方と言えるな
オブジェクト変数名に、あたかも関数のように()が
つく表記の方が、はじめ見たときは違和感を感じた
0352デフォルトの名無しさん
2012/01/07(土) 23:15:38.73Hoge hoge = 1;
0353デフォルトの名無しさん
2012/01/07(土) 23:17:58.59CRLF、Multibyte-charの緩衝とか
0354デフォルトの名無しさん
2012/01/07(土) 23:22:40.910355デフォルトの名無しさん
2012/01/07(土) 23:26:51.230356デフォルトの名無しさん
2012/01/07(土) 23:27:58.952パターンあるみたいで、どれが正しいのか分かりません。
データ: "a" (1バイト
boostとか、あとは動的にテーブルを生成しているタイプのコード
(テーブルは 0x00000000, 0x77073096, で始まるようです)
crc32: 0xe8b7be43
0x00000000, 0x04C11DB7 で始まるテーブルを持つコード
crc32: 0x19939b6b
ttp://blog.goo.ne.jp/masaki_goo_2006/e/69c68a18c872338e8c2751d662706f46
これらは何が違うのでしょうか?
0357デフォルトの名無しさん
2012/01/07(土) 23:29:38.630358デフォルトの名無しさん
2012/01/08(日) 01:58:12.32まあwikipediaでもみればいいんじゃないか
0359デフォルトの名無しさん
2012/01/08(日) 07:55:56.97int 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() に渡したいのですが,
どうやれば良いでしょうか?
0360デフォルトの名無しさん
2012/01/08(日) 07:59:49.480361デフォルトの名無しさん
2012/01/08(日) 10:11:39.78> get_int() の返す int の一時オブジェクトのポインタを func_int() に渡したいのですが,
そもそもなんでそんなことしたいのさ。
int の一時オブジェクトとやらがあるのかどうかは知らんけど、仮にあったとしても func_int( ) に
渡った時点でそのオブジェクトは消えてるかもしれないよ。
「一時」オブジェクトなんだし。
0362デフォルトの名無しさん
2012/01/08(日) 10:52:02.73そんな邪悪なものは封印すべきだ
0363デフォルトの名無しさん
2012/01/08(日) 10:58:58.24無理やりmoveっぽいことを書きたい時とかに使う
0364デフォルトの名無しさん
2012/01/08(日) 11:01:58.72この例だと、わざわざポインタ渡しするメリットが全くない。
多分、実際のコードではもっと大きなオブジェクトを渡していて
コピーのコストが心配なんだろうけど、最近のコンパイラは
こんな単純なケースでいちいちコピーなんかしないから値を返しても問題ない。
これでも読んどけ。
http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/
0365デフォルトの名無しさん
2012/01/08(日) 11:05:52.26>無理やりmoveっぽいことを書きたい
そんなことはコンパイラが勝手にやる。
0366デフォルトの名無しさん
2012/01/08(日) 12:10:12.15参照とポインタを一緒にされてもなぁ
0367デフォルトの名無しさん
2012/01/08(日) 12:23:48.54返り値に関してはコンパイラ任せでいいだろうけど
それじゃテンポラリを関数の引数に渡せないじゃん
hoge.swap(MakeHoge());
みたいなことをするにはコンパイラの力だけじゃできない
hoge.swap(MakeHoge().GetRef());
こういうふうに明示的に参照を返さないとね
0368デフォルトの名無しさん
2012/01/08(日) 12:33:24.07{
i = 1;
return i;
}
0369デフォルトの名無しさん
2012/01/08(日) 12:50:41.240370デフォルトの名無しさん
2012/01/08(日) 12:54:52.93それを仮に取ったとして、直後に大抵解体されてしまうから
無意味で危険なアドレスになっちまうよな
constの参照は一次オブジェクトを束縛出来るんだっけ
0371デフォルトの名無しさん
2012/01/08(日) 13:11:14.910372デフォルトの名無しさん
2012/01/08(日) 13:35:58.42すいません.質問用に単純化したので,実際には get_int() は _strtoui64() で ulonglong を返します.
func_int() は自作の,set_datas() という値をclassのメンバに設定する関数で,ポインタ引数を複数持ち,
NULLが設定されていない引数をメンバに設定します.
//member func
void set_data(const POINT* ppoint, const FILETIME* ptime, const ULONGLONG* pID)
{
if( ppoint ) m_point = *ppoint;
if( ptime ) m_time = *ptime;
if( pID ) m_point = *pID;
}
例えば POINT get_point() や FILETIME get_time() のような構造体を返す場合は,一見すると問題なくできたのに,
ulonglong を返す場合にエラーとなってしまったので質問させて頂きました.
set_data( &get_point(), &get_time(), &_strtoui64("1",NULL, 10 ) );
この場合,get_point(), get_time() の返す一時オブジェクトは, set_data() が終了するまで生きていると考えたのですが,
認識が間違っていたでしょうか?
template<typename T>
inline const T* GetPtr(const T& in)
{
return ∈
}
set_data( &get_point(), &get_time(), GetPtr( _strtoui64("1",NULL, 10 ) ) );
↑また,先ほど思いついたのですが,この方法は問題がありますか?
0373デフォルトの名無しさん
2012/01/08(日) 13:51:16.73そんな実装依存オブジェクトの生存期間なんか知ったこっちゃない
0374デフォルトの名無しさん
2012/01/08(日) 14:13:46.62言語仕様上、get_point()内で確保された一時オブジェクトは、
get_point()終了時に破棄される。
現実にはメモリ内には一時オブジェクトがそのまま残っていて
利用できることがあるが、あくまで偶然。
0375デフォルトの名無しさん
2012/01/08(日) 14:46:47.67const POINT& p = get_point();
const FILETIME& f = get_time();
const ULONGLONG& n = _strtoui64("1",NULL, 10 );
set_data( &p, &f, &n );
0376デフォルトの名無しさん
2012/01/08(日) 14:49:41.65VC++でもgccでも警告だぞそれは
0377デフォルトの名無しさん
2012/01/08(日) 15:30:47.58参照の意味で使われている(C言語の)ポインタ渡しをただただ勘違いしてるという気がしないでもない。
0378359
2012/01/08(日) 17:48:54.81指摘の通り const 参照の時の寿命と同じようになるものだと勘違いしていたようです.
VisualC++ 2010 Express でやっていたのですが,warning level 4 にしたら
&get_point(), &get_time() の部分でも warning C4238 が出るようになりました.
Microsoft の独自拡張で問題なく動いたように見えたのでしょうか?
>>375 さんのやり方も参考にしながら,仕様変更も含めてもう一度考えたいと思います.
今回は勉強になりました.ありがとう.
0379デフォルトの名無しさん
2012/01/09(月) 10:22:44.32C++では、クラスのメンバ変数に文字列の定数は宣言できない仕様、ですが
自分は、良くない仕様だと思うのですが、みなさんはどう思われますか?
また。文字列の定数をクラスのメンバ変数で宣言する、裏技はありませんか?
0380デフォルトの名無しさん
2012/01/09(月) 10:36:28.860381デフォルトの名無しさん
2012/01/09(月) 11:31:27.24ありがとう。コンストラクタでは、宣言できるんですね。
0382デフォルトの名無しさん
2012/01/09(月) 11:37:15.290383デフォルトの名無しさん
2012/01/10(火) 12:27:22.640384デフォルトの名無しさん
2012/01/10(火) 15:38:40.14例えばこんな感じです。
std::list<int> ls;
ls.push_back(1);
ls.push_back(2);
ls.push_back(3);
ls.push_back(4);
ls.push_back(5); 先頭(1)-(2)-(3)-(4)-(5)終わり
となってるところで、先頭(1)-(4)-(2)-(3)-(5)終わり、とやりたいです。
単純にリンクの張替えで出来ると思ったのですが、やり方がわかりません。
0385デフォルトの名無しさん
2012/01/10(火) 15:49:05.46std::list<int>::iterator pos4 = std::find(ls.begin(), ls.end(), 4);
assert(pos4 != ls.end());
ls.splice(pos2, ls, pos4);
0386デフォルトの名無しさん
2012/01/10(火) 15:55:28.13ありがとうございました。
0387デフォルトの名無しさん
2012/01/10(火) 23:39:37.95これは洗練されているというべきなのか。
0388デフォルトの名無しさん
2012/01/11(水) 03:53:25.45(Hamigakiとか)
GPUを使うOpenCVとかと混ぜたらうまく動かないってことでいいのでしょうか
0389デフォルトの名無しさん
2012/01/11(水) 06:58:34.140390デフォルトの名無しさん
2012/01/12(木) 09:26:37.71自分で作ったウィンドウではなく、MessageBox関数を利用します。
そこでMessageBoxのウィンドウハンドルを取得したいのですが
1 CreateThreadで別スレッドを作成
2 別スレッドがMessageBox呼び出し
3 メインスレッドがEnumThreadWindowsで別スレッドのウィンドウを列挙
4 GetWindowTextでタイトル照合
タイトルが一致するウィンドウがなければ3に戻る
5 取得したウィンドウハンドルは、タイムアウトしたらWM_CLOSEを送るなどに使用
CreateThreadで作成されたスレッドは
IMEが作ったウィンドウや、タイトルのないウィンドウが
あらかじめ作られているようで
タイトルによってはそれらと一致してしまうので
この手段が不確実です。
ウィンドウを列挙したり、文字列を比較するというのも
かなり無駄が多いです。
このような原始的な方法しか思いつかないのですが
他になにか良い方法はないでしょうか。
0391デフォルトの名無しさん
2012/01/12(木) 09:42:36.84メッセージボックスのウィンドウクラス名は #32770 になってるから1発でわかる
クラス名はGetClassNameで取れる
0392デフォルトの名無しさん
2012/01/12(木) 09:47:09.020393デフォルトの名無しさん
2012/01/12(木) 09:50:24.76http://support.microsoft.com/kb/181934
0394デフォルトの名無しさん
2012/01/12(木) 10:33:38.430395デフォルトの名無しさん
2012/01/12(木) 10:38:49.79何を言っているのかわからない。
int*をvoid*に変換したとき、intの2バイト目や3バイト目じゃなく
先頭を指すアドレスが得られるのか?ということか?
0396390
2012/01/12(木) 12:02:26.01>>392 MessageBoxTimeoutはどのような動作をするのですか?
>>393 この方法では非同期が実現できなそうです
0397デフォルトの名無しさん
2012/01/12(木) 12:10:32.89CBase* base = sub;
void* p = (void*)base;
としたときに sub == pになるかってことじゃね
0398デフォルトの名無しさん
2012/01/12(木) 12:13:01.75MessageBox を非同期化するのと同じ手法が使えないの?
0399390
2012/01/12(木) 12:39:24.61とりあえず、393は制限時間が未定の場合に対応できなそうです。
例えば次のような状況です。
1 ファイルのコピーを開始
2 ユーザーがキャンセルを押す
3 キャンセルしますか? の非同期メッセージボックスを表示
4 ユーザーが押す前にコピーが終わってしまった
5 キャンセルしますか? を自動で閉じて、コピーが終了しましたと表示
0400デフォルトの名無しさん
2012/01/12(木) 12:51:46.50タイムアウト型 (開く前に時間を決めておいて 経過時間が過ぎたら勝手に閉じる)
と別イベント型 (入力操作とは別になんらかのイベントを受けて閉じる)
両方が機能できるような MessageBox が欲しいということですかい?
0401390
2012/01/12(木) 13:15:06.61タイムアウト型もイベント型もこれを呼び出すことで実装したいです。
0402390
2012/01/12(木) 13:38:21.79自分が作成したスレッドで、他にメッセージボックスがないことは確実なので
誤認することはなさそうです。
ありがとうございました。
しかし、依然としてウィンドウの列挙と文字列比較には変わりありません。
問題を整理してみます。
A 非同期でメッセージボックスを表示する
→CreateThreadで作成したスレッドからMessageBoxを呼ぶ
B タイムアウト、外部イベント、またはプログラム内から能動的にMessageBoxを閉じる
→MessageBoxを閉じるメソッドの実装
C MessageBoxを閉じるメソッドの実装
→ハンドルを取得して、WM_CLOSEを送る
D ハンドルの取得方法
→スレッドウィンドウを列挙して、クラス名を比較する
Aに問題はなさそうです。
BとC自体に問題はないと思いますが、Dに無駄が多いので、
ハンドルを取得せずに、MessageBoxをメインスレッド閉じる方法があれば知りたいです。
または、Dのハンドル取得方法でもっとスマートなものがあればと思います。
0403デフォルトの名無しさん
2012/01/12(木) 14:04:01.96でフック仕掛けて
CallWndRetProcでWM_INITDIALOGを監視する
0404デフォルトの名無しさん
2012/01/12(木) 14:50:20.44sscanf(str, "ID%d", &id");
などとするとき、"ID100"からも"Id100"からも100を取り出したいのですが。
0405デフォルトの名無しさん
2012/01/12(木) 15:09:48.770406デフォルトの名無しさん
2012/01/12(木) 15:20:32.89if else
swich
しかないのでしょうか
boostやstlでもっと複雑なことのできる条件分枝はないのでしょうか
0407デフォルトの名無しさん
2012/01/12(木) 15:25:24.110408デフォルトの名無しさん
2012/01/12(木) 15:26:08.52関数のオーバーロードやtemplate特化も条件分岐構文の一種
boostはこれらの条件分岐を駆使してとても複雑
0409デフォルトの名無しさん
2012/01/12(木) 16:11:47.592chやニコニコ動画に民主党から反日工作費が流れていることが知られるようになってきた。
民主党が用意した資金で工作員が2chを荒らしていることもだんだんと知られるようになってきた
0410デフォルトの名無しさん
2012/01/12(木) 20:26:40.40同じ名前で引数が異なるローカル関数って作れますか?
hoge(enum hoge);
hoge(int hoge);
0411デフォルトの名無しさん
2012/01/12(木) 20:38:01.35Cでの話なのかC++での話なのか
はっきりしてくれ
0412デフォルトの名無しさん
2012/01/12(木) 20:38:54.870413デフォルトの名無しさん
2012/01/12(木) 22:11:17.80関数のオーバーロードなら
C++で普通に出来ます。
0414デフォルトの名無しさん
2012/01/13(金) 06:53:45.81http://c-production.com/contents/c/sec08.html
プロトタイプ宣言:
グローバル領域で宣言すればグローバル関数となりどこからも呼出し可能
ほかの関数内で宣言すればローカル関数となりその関数内でのみ呼出しができる
↑みたいに書いてあるサイトがあるけど規格票にそんなことかいてあったっけ?
0415デフォルトの名無しさん
2012/01/13(金) 08:25:23.680416デフォルトの名無しさん
2012/01/13(金) 08:39:22.53struct { void operator () (void) {} } local ;
local();
}
0417デフォルトの名無しさん
2012/01/13(金) 10:05:20.06知らんかった。
0418デフォルトの名無しさん
2012/01/13(金) 11:37:09.75グローバルな宣言がなくローカルに宣言した関数は、その関数からしか
#ifdef __cplusplus
呼べない。
#else
プロトタイプの適用が行なわれない。
#endif
0419デフォルトの名無しさん
2012/01/13(金) 11:56:02.25C言語はプロトタイプ宣言不要だよ?
ローカル関数なんて言葉もなかったような…
0420デフォルトの名無しさん
2012/01/13(金) 12:15:05.780421デフォルトの名無しさん
2012/01/13(金) 13:36:42.82規格には記載ないな
きっと local function definitions are illegal を ローカル関数の定義が正しくありません。 と訳したVC++の所為
0422デフォルトの名無しさん
2012/01/13(金) 19:25:41.78初心者向けの本は勉強したけど、全然わかりません。
やさしいC++をひと通りコード書いて理解しました。
int main(void)
とか、int main の中に何か入ってるものは何を意味してるのか分からないし
operator関数も難しいです。
0423デフォルトの名無しさん
2012/01/13(金) 19:48:10.47とりあえず自分が興味ある分野のソースを見てみたらいい
0424デフォルトの名無しさん
2012/01/13(金) 21:01:01.85いや、voidの意味から分からん言ってるなら、ロベールが先だろ
0425デフォルトの名無しさん
2012/01/14(土) 00:13:21.94g++ で -fno-exceptions をつけるとかじゃダメなの?
0426デフォルトの名無しさん
2012/01/14(土) 01:06:12.81@aritayoshifu 有田芳生
捜査当局が内偵を続けている農水疑惑。詳細な怪文書まで出回っている。3億円の
行方はどこに?
@minorucchu ジャーナリスト 田中稔
野田改造内閣を揺るがす、農水省3億円スキャンダルの怪文書。二人の議員名が浮上。
34分前 webから
https://twitter.com/#!/minorucchu/status/157687110562881537
鹿野と筒井らしい
自公は問責も視野に調査開始だって
0427デフォルトの名無しさん
2012/01/14(土) 01:08:50.29std::wcout << L"ほげ";
JavaからJNI(Java Native Interface)でc++のコードを使っていて、
デバッグ用にcoutを使ったら文字化けしてしまいました。
もしかしてコーディングが違うのでは?とか思いました。
調べてもよくわからないのですけど、おそらくJavaが用意したコンソールは、UTF16のビッグエンディアンなんじゃないかなと思いました。
なので、L"ほげ"というのをBigエンディアンに出来ないでしょうか?
LってのがLittleだったら、神がかってるなと思って、B"ほげ"にしてみたらやっぱだめでした。
Localeなのかな。
std::wcout.imbue()付近で調べればわかりますかね?
0428デフォルトの名無しさん
2012/01/14(土) 01:22:56.59エスパースレで聞いたほうがいい
0429デフォルトの名無しさん
2012/01/14(土) 03:08:09.920430デフォルトの名無しさん
2012/01/14(土) 14:00:04.10ShiftJIS(を独自拡張したCP932)しか使えないから。
文字列としてUTF16LEを受け入れたり内部で取り扱ったりすることはできるけど
localeを経由すると必ずCP932になる。wchar_tに格納していてもCP932になる。
なぜならlocaleがunicode出力を受け付けないから(仕様)。ハゲワラ。
0431デフォルトの名無しさん
2012/01/14(土) 14:01:54.22localeを経由しないAPIかcharを使ってバイナリでごりごり出力するかどっちかだ。
あと、コンソールもUnicodeモードにしないとだめだぞ。
0432デフォルトの名無しさん
2012/01/14(土) 14:05:30.650433デフォルトの名無しさん
2012/01/14(土) 14:13:22.67馬鹿は休み休み言え
0434デフォルトの名無しさん
2012/01/14(土) 14:14:23.39L は Letteral
0435デフォルトの名無しさん
2012/01/14(土) 14:32:16.790436デフォルトの名無しさん
2012/01/14(土) 14:35:08.33Windows日本語版の問題?
うんにゃ。localeライブラリを自力で記述すればちゃんと動くよ。
VC++のlocaleがUnicodeを受け付けないのが問題なだけ
0437デフォルトの名無しさん
2012/01/14(土) 16:03:26.59他人が書いたソースが読めない場合は…
まだ基礎力が足りていないんだと思うけど、一応初心者用の本をひと通り勉強したから
ここからステップアップするには何が必要なんだろうかなと
他人が書いた"易しめ”のソースが、どこかで見られたら良いなと思うんですけど
そういう場所や参考書は無いですか?
0438デフォルトの名無しさん
2012/01/14(土) 16:22:39.210439デフォルトの名無しさん
2012/01/14(土) 17:25:57.60初心者用の本を読み終われば、他人のコードも読めるようになっているはず。
まだならば、読み切れていない。
知らない単語・関数があるのならば、リファレンス本(or Web)を使え。
0440デフォルトの名無しさん
2012/01/14(土) 17:42:18.61リファレンス読んでみます。
オススメの初心者用の本を教えて下さい
0441デフォルトの名無しさん
2012/01/14(土) 18:48:59.228行目が4,3,2,1,0,になって欲しいんだけどなんでこうなっちゃうか教えて欲しい
コピーコンストラクタが悪いんだろうけど何がおかしいのかわからなくて困ってる
0443デフォルトの名無しさん
2012/01/14(土) 20:32:10.91public:
virtual void Release(void) = 0;
};
class Hoge : public Interface {
public:
void Release(void) { delete this; }
};
extern "C" __declspec(dllexport) IHoge * __stdcall Create(void) {
return new (std::nothrow) IHoge;
}
---------------
extern "C" __declspec(dllimport) IHoge * __stdcall Create(void) ;
これってDLLとEXEでvtableの構成が変わっちゃうかも、とか気にしなくていいの?
0444デフォルトの名無しさん
2012/01/14(土) 20:32:43.86○IHoge
で
0445デフォルトの名無しさん
2012/01/14(土) 21:31:49.20vtblのレイアウトはWindowsでは決まっている(そうじゃないとCOMが動かない)
0446デフォルトの名無しさん
2012/01/14(土) 21:49:50.45なるほど
VC++やOSのバージョンは特に気にしなくていいということですかね
安心しました
0447デフォルトの名無しさん
2012/01/14(土) 23:20:13.66とか
#ifdef HAVE_CPP0X
みたいなことってできないの?
0448デフォルトの名無しさん
2012/01/14(土) 23:26:58.33かな
0449デフォルトの名無しさん
2012/01/15(日) 01:25:48.99HAVE_LAMBDAとかHAVE_DECLETYPEとかほしいな
0450デフォルトの名無しさん
2012/01/15(日) 02:02:08.21template <class X> void my_swap(X & a, X & b) {
STATIC_TRY { a.swap(b); }
STATIC_CATCH { std::swap(a, b); }
}
// a.swap(b)がコンパイルエラーならstd::swap(a, b)でも試す
こんな感じで
めんどくさいメタプログラミング、とかマクロで実装状況を調べて、とか正直めんどくさい
0451デフォルトの名無しさん
2012/01/15(日) 03:31:12.670452デフォルトの名無しさん
2012/01/15(日) 14:45:54.75なんか作るのに難しい所があるのかな
0453デフォルトの名無しさん
2012/01/15(日) 15:33:08.960454デフォルトの名無しさん
2012/01/15(日) 16:36:26.760455デフォルトの名無しさん
2012/01/15(日) 16:41:25.59問題無いですよ。
0456デフォルトの名無しさん
2012/01/15(日) 17:50:14.19weak_ptr機能を導入すると実行コストがshared_ptrと大差なくなると思われ
0457デフォルトの名無しさん
2012/01/15(日) 19:49:04.540458デフォルトの名無しさん
2012/01/15(日) 21:12:22.340459デフォルトの名無しさん
2012/01/15(日) 21:15:33.660460デフォルトの名無しさん
2012/01/15(日) 22:39:15.44メールで提出するので何かをダウンロードしたりしないでプログラムの中だけでやりたいです。
0461デフォルトの名無しさん
2012/01/15(日) 22:40:25.34すみません、フォントをMS Pゴシックに変える方法が知りたいです。
0462デフォルトの名無しさん
2012/01/15(日) 22:43:00.460463デフォルトの名無しさん
2012/01/16(月) 00:35:53.28値をdllに渡して処理したあと、グローバル変数に値を入れておいて、
vbaから読み込みのフラグが立ったらその変数を戻すようにしているのですが、
グローバル変数は呼び出し速度が遅い等ネットで見かけます。
グローバル変数を回避して、ローカル変数のみで同様のことをするには
ざっくりどんなことをすればいいのでしょうか
0464デフォルトの名無しさん
2012/01/16(月) 00:38:14.88どこだその糞サイトは
0465デフォルトの名無しさん
2012/01/16(月) 01:50:55.97> グローバル変数は呼び出し速度が遅い等ネットで見かけます。
どういう理由で何の処理が遅くなるのかがあやふやなので、
まずはそのことがどこに書かれているか教えてください。
0466デフォルトの名無しさん
2012/01/16(月) 02:05:19.02{
0467デフォルトの名無しさん
2012/01/16(月) 02:05:50.030468デフォルトの名無しさん
2012/01/16(月) 02:08:26.73{
0469デフォルトの名無しさん
2012/01/16(月) 02:12:55.51class window’ has the same name as the class in which it is declared
0470デフォルトの名無しさん
2012/01/16(月) 10:44:06.68排他処理のこと言ってるんじゃね?
0471デフォルトの名無しさん
2012/01/16(月) 11:25:02.57テンプレート関数に部分特殊化はないと思っていたのですが
以下のように書いたらよくわからなくなってきました。
//上になにもテンプレート宣言がないときは<>が構文エラー
//template<typename T, typename U, typename V> void f<>(T, U, V){}
//通常のテンプレート関数
template<typename T, typename U> void f(T, U){}
//テンプレートの特殊化は問題なし?
template<> void f<>(int, int){}
//この構文は何? 既に本体を持っています。上のがなければok
//void f<>(int, int){}
//同じ引数の別のオーバーロードは問題なし?
void f(int, int){}
//テンプレートの部分特殊化のつもりの文
template<typename T, typename U> void f<>(T*, U){}
//同じ引数の別のオーバーロードのつもりの文。関数テンプレートは既に定義されています
//template<typename T, typename U> void f(T*, U){}
//別のオーバーロードなのにtemplateの部分特殊化のように書ける?
template<typename T> void f<>(T*){}
上の文のおかしなところをご指摘いただけないでしょうか。
VC2010です。
0472デフォルトの名無しさん
2012/01/16(月) 11:25:36.020473デフォルトの名無しさん
2012/01/16(月) 11:47:37.53> //テンプレートの部分特殊化のつもりの文
> template<typename T, typename U> void f<>(T*, U){}
いいえ、それは部分特殊化ではありません。
0474471
2012/01/16(月) 12:30:28.34だとすると<>があるとないとでは、どのように違うのですか?
0475デフォルトの名無しさん
2012/01/16(月) 13:05:46.91無意味で違いがない
0476デフォルトの名無しさん
2012/01/16(月) 13:35:20.110477デフォルトの名無しさん
2012/01/16(月) 16:00:34.59float fsin = 0;
_asm{FLD DWORD PTR DS:[fsin]
FSIN
FSTP DWORD PTR DS:[fsin]}
を使う場合では、どちらが高速ですか?
0478デフォルトの名無しさん
2012/01/16(月) 17:18:33.690479デフォルトの名無しさん
2012/01/16(月) 18:46:29.15その結果は他の環境でも
当てはまりますか?
0480デフォルトの名無しさん
2012/01/16(月) 18:48:54.93ライブラリのバージョンだとかCPUやチップセットの種類だとか様々な環境の違いで変わること。
0481デフォルトの名無しさん
2012/01/16(月) 18:49:12.23一人の浅知恵が勝てるわけがない
0482デフォルトの名無しさん
2012/01/16(月) 18:54:55.30いや、勝てる。
libcはいかなる環境のいかなる使い方でも最悪の速度が悪化しないことが求められる。
自作は勝手に条件絞ってその条件の範囲内でのベンチマーク最速を目指せる。
0483デフォルトの名無しさん
2012/01/16(月) 18:55:58.800484デフォルトの名無しさん
2012/01/16(月) 18:58:18.15こういうことを言う奴に限ってクソみたいなもんを作る
0485デフォルトの名無しさん
2012/01/16(月) 19:01:54.85ループ展開、call削減、分岐削減、キャッシュヒット向上とか
0486デフォルトの名無しさん
2012/01/16(月) 19:04:20.74ベンチマーク最速を目指すために書きまくる人vs理論で必死に否定する人
0487デフォルトの名無しさん
2012/01/16(月) 19:08:00.77速度問題で勝ちたきゃそれしかねーよ。
0488デフォルトの名無しさん
2012/01/16(月) 21:18:11.99これはsqrtの例だけど、こんな感じで検証して、できれば記事を投稿しろ。
http://www.codeproject.com/KB/cpp/Sqrt_Prec_VS_Speed.aspx
0489デフォルトの名無しさん
2012/01/16(月) 21:19:55.69http://gruntthepeon.free.fr/ssemath/
0490デフォルトの名無しさん
2012/01/17(火) 00:25:56.78最高の速度を追求するときは標準関数には頼らない。
0491デフォルトの名無しさん
2012/01/18(水) 23:14:30.29{
int mHoge;
virtual void hoge(void) = 0;
void test(int Num) {
mHoge = Num;
}
};
みたいな抽象クラスを継承するHugaというクラスのインスタンスを作った時、
関数testの実体はインスタンスの数だけ存在するのでしょうか?
0492デフォルトの名無しさん
2012/01/18(水) 23:16:15.940493デフォルトの名無しさん
2012/01/18(水) 23:19:11.750494デフォルトの名無しさん
2012/01/18(水) 23:20:15.860495デフォルトの名無しさん
2012/01/18(水) 23:20:17.720496デフォルトの名無しさん
2012/01/18(水) 23:24:32.800497デフォルトの名無しさん
2012/01/18(水) 23:24:33.44一つにするときはstaticを使うもんだと思ってました
0498デフォルトの名無しさん
2012/01/18(水) 23:24:33.96なかったら困るだろ
0499デフォルトの名無しさん
2012/01/19(木) 13:42:53.62普通の方法(↓)ではアクセスできないみたいなんです。
fopen( "C:/.../Temporary Internet Files/sample.jpg", "r" )
戻り値:null
何か特別な処理が必要なんでしょうか?
0500デフォルトの名無しさん
2012/01/19(木) 13:52:28.980501デフォルトの名無しさん
2012/01/19(木) 14:07:00.59GetUrlCacheEntryInfoEx とか。
0502499
2012/01/19(木) 14:17:04.90IEのインターネット一時ファイルの実体(?)って
"/Temporary Internet Files/Content.IE5/"の更に下にあるんですね。
エクスプローラーではTemporary Internet Filesの直下にファイルがあるように見えたんですが、
コマンドプロンプトで見て気づきました。
0504デフォルトの名無しさん
2012/01/20(金) 01:56:49.32int len = strlen(hoge);
これってlenに9が返ってくるとは思わないほうがいいですか?
帰ってこないとしたらどう初期化すべきですか?
0505デフォルトの名無しさん
2012/01/20(金) 02:00:01.820506デフォルトの名無しさん
2012/01/20(金) 02:40:25.88char hoge[10];
int len = sizeof(hoge)-1;
でおk
0507デフォルトの名無しさん
2012/01/20(金) 02:50:14.66ともあれレスありがとうございます
0508デフォルトの名無しさん
2012/01/20(金) 07:56:40.51初期化したいのなら、hoge[0] = '\0';で。
0509デフォルトの名無しさん
2012/01/20(金) 08:09:46.09char hoge[10] = {}; で。
0510デフォルトの名無しさん
2012/01/20(金) 09:55:24.58するとstrlen(hoge) で0になっちゃいませんか?
>>509
これはどういう動作になるんでしょうか?
strlen(hoge)が9に約束されます?
0511デフォルトの名無しさん
2012/01/20(金) 10:12:30.97template <unsigned int N> void init(char (&)[N]) {
for(unsigned int i = 0 ; i < N - 1 ; ++i) a[i] = 1;
a[N - 1] = 0 ;
}
char a[10] ;
init(a) ;
cout << strlen(a) << endl ;
0512デフォルトの名無しさん
2012/01/20(金) 10:24:30.57???
hogeに何が入っているかに因るから
strlen(hoge)が保証される分けない。
strcpy(hoge, "a");
ってやった後に
strlen(hoge);
ってすればstrlen(hoge);は1であることが保証されるけど、
strcpy(hoge, "abcdefghi");
の後に
strlen(hoge);ならstrlen(hoge);が9であることが保証される。
hogeの定義により確保したmemoryの大きさを保証したいのなら
>>506の言うとおりsizeof(hoge)とする以外にないよ。
0513デフォルトの名無しさん
2012/01/20(金) 10:53:05.54>>511参考にさせて頂きます
0514デフォルトの名無しさん
2012/01/20(金) 12:07:59.47strlenはたんに'\0'の前までの数を数えているだけなのだから。
0515デフォルトの名無しさん
2012/01/20(金) 12:09:49.37それならそうと最初からそう言えと。
0516デフォルトの名無しさん
2012/01/20(金) 12:10:16.960517デフォルトの名無しさん
2012/01/20(金) 13:00:26.210518デフォルトの名無しさん
2012/01/21(土) 10:41:15.47ポインタから配列の大きさを求めることは出来るのか?という疑問です
もっと言えば、関数にポインタだけ渡しておけば、あとは勝手にサイズも見てもらって処理するような処理は可能か?ということです
上では一応sizeof使えとのことでしたが、ポインタの渡し方によっては
ポインタそのもののサイズを返したりするので、結局素直に初期化する関数を作るべきかなあ
0519デフォルトの名無しさん
2012/01/21(土) 11:05:15.29vector使えでFA
0520デフォルトの名無しさん
2012/01/21(土) 11:05:33.020521デフォルトの名無しさん
2012/01/21(土) 11:10:22.470522デフォルトの名無しさん
2012/01/21(土) 11:42:01.82これを書こうよ。。。
答え:できない
0523デフォルトの名無しさん
2012/01/21(土) 11:45:38.89vector考えてみます
0524デフォルトの名無しさん
2012/01/21(土) 12:59:38.80namespace {
template <unsigned int R> inline BigInt Factor(BigInt const & n) { return n == 0 ? 1 : n * Factor<R - 1>(n - 1); }
template <> inline BigInt Factor<0>(BigInt const & n) { return n == 0 ? 1 : n * Factor<256>(n - 1); }
}
BigInt factor(BigInt const & n) { return Factor<256>(n) ; }
// func.hpp
BigInt factor(BigInt const & n);
こんな感じのコードを見かけたんですけどこのテンプレートになにか意味あるんですか?
0525デフォルトの名無しさん
2012/01/21(土) 13:14:48.03どこら辺を意味がないと思ったの。
0526デフォルトの名無しさん
2012/01/21(土) 13:49:19.71なんで普通に再帰しないのかなーって
0527デフォルトの名無しさん
2012/01/21(土) 13:51:40.62再帰の限界の数の回避とかなのかね。
0528デフォルトの名無しさん
2012/01/23(月) 12:18:57.370529デフォルトの名無しさん
2012/01/23(月) 12:49:56.340530デフォルトの名無しさん
2012/01/23(月) 16:48:29.11テンプレートでコンパイル時に計算させようとすると再起しかないんじゃないの。
0531デフォルトの名無しさん
2012/01/23(月) 17:21:33.84そういう意味じゃないとおもう
0532デフォルトの名無しさん
2012/01/23(月) 17:53:13.43テンプレート引数の代わりに関数引数で再帰している
よくわからないコード
0533デフォルトの名無しさん
2012/01/23(月) 17:53:29.35コンパイル時定数として階乗の結果が欲しいのをループじゃ対応できないのでは?
0534デフォルトの名無しさん
2012/01/23(月) 18:03:02.900535デフォルトの名無しさん
2012/01/23(月) 18:26:06.140536デフォルトの名無しさん
2012/01/23(月) 20:12:08.33コンパイル時に計算されるからインラインに展開してオーバーヘッドがなくなるとか関係ないのでは?
0537デフォルトの名無しさん
2012/01/23(月) 21:30:45.28それはもしかしてこんなコードじゃないのかい
ttp://codepad.org/t8ejWQ2g
0538デフォルトの名無しさん
2012/01/24(火) 10:01:51.79template <typename T = char>
class Hoge
{
};
void test(void)
{
Hoge h;
}
テンプレート引数 T に対して char を与えてやってるので、
Hoge を使用する際、テンプレート引数を与えなくてもよさそうなのに、
error C2955: 'Hoge' : クラス テンプレート を使用するには テンプレート 引数リストが必要です
となります。どうしてですか?
どうぞよろしくお願いします。
VS2008 pro
Win7 pro x64
0539デフォルトの名無しさん
2012/01/24(火) 10:03:11.960540デフォルトの名無しさん
2012/01/24(火) 11:31:02.170541デフォルトの名無しさん
2012/01/24(火) 11:49:44.40C++で使えて入門に向いてるのって何があるかな?
0542デフォルトの名無しさん
2012/01/24(火) 11:53:37.64CTMAXが200を超えたとき、例えば201に
なったとき、10ms周期の処理が5ms後に実行
されるという現象がおきます。
下記のように毎回実行される5msの処理は仕方
ありませんが、10ms以降の処理は実行タイミング
がかぶらないようになっています。この状態でさ
らに実行タイミングがずれないような処理を作りた
いのですが、思いつきません。できるものでしょうか?
void time(void){ #define CTMAX 200 static int ct;
if(++ct > CTMAX) ct = 0;
func5ms();/* 5ms処理 */
if(ct & 0x01) == 0)
func10ms();
else{ if(ct & 0x02) != 0) func20ms();
else{ switch (ct){
case 1: case 21: case 41: case 61: case 81:
case 101: case 121: case 141: case 161: case 181:
func100ms(); break;
case 13: case 53: case 93: case 133: case 173:
func200ms(); break;
case 5: case 105:
func500ms(); break;
case 9:
func1s(); break;
}}}}
0543デフォルトの名無しさん
2012/01/24(火) 12:12:36.72s = milisecond();
do_something();
e = milisecond();
if(e-s<200))
sleep_milisecond(200-(e-s));
ぐらい?
0544デフォルトの名無しさん
2012/01/24(火) 12:24:07.29ctって0〜200までの値、つまり
201個の値を取ることになっていたんだけど、
そこがまず問題だよね。
1005ms が 1000ms と等しいよ。
本当ならば、>= としなければならないよね?
// if(++ct >= CTMAX) ct = 0;
or
ct++;
ct %= CTMAX;
0545デフォルトの名無しさん
2012/01/24(火) 12:34:49.47{
#define CTMAX 200
static int ct = 0;
// 0 <= ct <= 199
ct %= CTMAX;
mod_10 = ct % 10;
mod_100 = ct % 100;
mod_200 = ct % 200;
mod_500 = ct % 500;
if(!mod_500)
func500ms();
if(!mod_200)
func200ms();
if(!mod_100)
func100ms();
if(!mod_10)
func10ms();
ct++;
}
0546デフォルトの名無しさん
2012/01/24(火) 13:52:36.91ct = (ct + 1) % CT_MAX;
0547デフォルトの名無しさん
2012/01/24(火) 14:01:39.16ct = 1;で実行することになって起動後9ms, 19ms, 29ms, ...
で実行することになるよ。
人が書いたコードにbug入れる奴っているんだよな
迷惑なんだよな
0548デフォルトの名無しさん
2012/01/24(火) 14:06:09.810549デフォルトの名無しさん
2012/01/24(火) 14:10:55.35time.hなんて高尚なヘッダは存在しないんじゃないの?
0551デフォルトの名無しさん
2012/01/25(水) 07:51:50.37自分は解決したから後はシーラないってか?
0552デフォルトの名無しさん
2012/01/25(水) 09:36:12.44さんのいうとおり++ct >= CTMAXとしただけでとりあえず
自分の作ったやつでも正常に動くっぽいですね。
ちなみに関数名にtimeなんて使ってません。書き込むとき
面倒なんで簡単な名前に変更しただけです。
>>545
のプログラムはわかりやすいですが、0のとき全部実行され
てしまうのが難ですね。
それからmod_10で考えると10回に1回しか起動しないので、
それだと10msじゃなくて50ms周期になってしまいます。
0553デフォルトの名無しさん
2012/01/25(水) 09:43:21.64> ちなみに関数名にtimeなんて使ってません。書き込むとき
> 面倒なんで簡単な名前に変更しただけです。
それにしても標準関数と名前がかぶるってねーだろ
0554デフォルトの名無しさん
2012/01/25(水) 09:51:57.71使いませんし。
0555デフォルトの名無しさん
2012/01/25(水) 10:14:03.52bug指摘されちゃった。
static int ct = 0;
if(ct == 0){
ct = 1;
return;
}
投稿した後に、これでうまくいくって気づいてはいたんだけどね。。。
この後はctが0になることはなくて、
0と等価な200がctの値としてくるから問題ないよね。
これくらい思いついてよ。。。
> それからmod_10で考えると10回に1回しか起動しないので、
> それだと10msじゃなくて50ms周期になってしまいます。
こっちは気づかなかった。きちんとdebugしてうまい具合にしてよ。
0556デフォルトの名無しさん
2012/01/25(水) 10:19:00.510557デフォルトの名無しさん
2012/01/25(水) 10:24:21.70time()を1ms毎に実行するようにするかして修正すれば良さそうだね。
後は任せた。
void time(void)
{
#define CTMAX 200
#define POLLING 5
static int ct = 0;
if(ct == 0){
ct = POLLING;
return;
}
// 0 <= ct <= 199
ct %= CTMAX;
mod_10 = ct % 10;
mod_100 = ct % 100;
mod_200 = ct % 200;
mod_500 = ct % 500;
if(!mod_500)
func500ms();
if(!mod_200)
func200ms();
if(!mod_100)
func100ms();
if(!mod_10)
func10ms();
ct += POLLING;
}
0558549
2012/01/25(水) 10:29:57.73time()やらtime.hに含む関数名を使ったりしないよ。
本当は、time()なんて関数を自作するのはまずいし、
他人に披露する時に借りの名前とするのも、
あらぬ誤解を招きかねないのでまずいんだけど、
でも、2chに書き込まれるような関数名に意見するのも面倒だし、
組み込みで使っている関数だって事は一見して明らかだったので、
time.hを使うことはまずないだろうって事であえて指摘しなかったんです。
まあ、本当は>>549がおかしいんだよ。
一々指摘するのも嫌だから指摘しなかっただけでさ。
私が名付けるとすれば、polling()かなぁ
0560デフォルトの名無しさん
2012/01/25(水) 10:47:03.80コードを書く前にまずは何をしたいのかを正しい日本語で人に説明する訓練をしなさい
0561デフォルトの名無しさん
2012/01/26(木) 21:39:52.680562デフォルトの名無しさん
2012/01/27(金) 13:12:52.00あとから定義したいと思うのですが、うまくできません。
何か解決方法はありますか?
// 宣言
class Hoge;
Hoge func( );
int main( )
{
Hoge h = func( );
return 0;
}
// 定義
class Hoge
{
public:
};
Hoge func( ){ return Hoge(); }
0563デフォルトの名無しさん
2012/01/27(金) 13:19:17.13// 宣言
class Hoge;
Hoge func( );
///////////////////////
//hoge.cpp/////////////
#include "hoge.h"
int main( )
{
Hoge h = func( );
return 0;
}
// hoge定義
class Hoge
{
public:
};
Hoge func( ){ return Hoge(); }
/////////////////////////////
ってことなら無理
Hoge h = func( );この時点でHogeの定義が見えてないとダメ
int main()の前に hoge定義を持ってこないと
0564デフォルトの名無しさん
2012/01/27(金) 13:21:27.99設計を見直したほうがいいような気がする。
0565デフォルトの名無しさん
2012/01/28(土) 00:37:44.02とりあえず動くコードとして、
mapの要素を巡回してshared_ptr<Hoge>::getの返り値と検索キーを比較
一致していたらそのイテレーターの指す要素をmから削除
としているのですが、これではO(N)になってしまいmapの利点を生かせません
0566デフォルトの名無しさん
2012/01/28(土) 00:44:01.910567デフォルトの名無しさん
2012/01/28(土) 01:03:22.810568デフォルトの名無しさん
2012/01/28(土) 01:44:20.83カスタムデリータに何もしない関数を指定してdeleteを防ぐ。
でも危険度は生ポインタをキーにするのとかわらないな。
0569デフォルトの名無しさん
2012/01/28(土) 09:47:26.46それって別ポインタとみなされて比較うまくいかないと思うけど
0570デフォルトの名無しさん
2012/01/28(土) 14:08:13.74下記のような場合、どう分ければいいでしょうか?
class Hoge {
private:
const int m_x;
public:
Hoge(int x = 3) throw() : m_x(x) {
//do something 1
}
void func(int a = 5) {
//do something 2
}
};
0571デフォルトの名無しさん
2012/01/28(土) 14:31:36.35struct Hoge {
Hoge(int x = 3);
void func(int a = 5);
private:
const int m_x ;
};
//Hoge.cpp
#include "Hoge.h"
Hoge(int x) : m_x(x) { do_something_1(); }
void Hoge::func(int a) { do_something_2(); }
0572デフォルトの名無しさん
2012/01/28(土) 14:46:52.59ありがとうございます
理解できました
0573デフォルトの名無しさん
2012/01/29(日) 16:27:31.12コンパイル→実行について教えてください
PCは富士通のノートパソコンで
OSはvista home premium
エディタはemacs
コンパイラはMinGW
です
ソースファイルをコンパイルして実行する際、
M-x compile
だと上手くいかないので、
M-x shell
から
>gcc -std=c99 ファイル.c
でコンパイルしています
ただ、毎回gcc -std=c99を書き込むのは煩わしいし、複数のソースファイルをコンパイルして実行する方法がわかりません。
Emacsで複数のソースファイルをC99で?コンパイルして、実行する効率的なやり方が知りたいです
0574デフォルトの名無しさん
2012/01/29(日) 16:40:29.72http://kohada.2ch.net/test/read.cgi/prog/1244310984/
0575デフォルトの名無しさん
2012/01/30(月) 07:41:57.55make
もしくはbatかシェルスクリプト
0576デフォルトの名無しさん
2012/01/30(月) 07:46:48.530577デフォルトの名無しさん
2012/01/30(月) 08:57:23.22lpstrFileに確保するバッファの大きさを決めるにあたって
あらかじめ受け取るファイル名の長さを取得できないでしょうか。
長さが足りない場合再起不能だし、かといって使われないのに数キロも確保したくないし
それでも足りない場合だってあるだろうし。
GetWindowTextに対するGetWindowTextLengthのような
関数があればよいのですが、この場合ユーザーからの入力なので
どうしたものやら。
0578573
2012/01/30(月) 09:04:33.22Makeの使い方を調べてみます。
0579デフォルトの名無しさん
2012/01/30(月) 10:32:00.09MAX_PATH分確保しとけばいいだろ
0580デフォルトの名無しさん
2012/01/30(月) 10:36:18.610581デフォルトの名無しさん
2012/01/30(月) 11:04:06.02その文字数とバッファ長比べてバッファが足りてないと判断したら失敗とみなしてバッファを伸ばしてリトライすればいいよ
0582デフォルトの名無しさん
2012/01/30(月) 11:12:39.59そうでないなら260どころか、257で充分だ。
0583デフォルトの名無しさん
2012/01/30(月) 11:22:41.080584デフォルトの名無しさん
2012/01/30(月) 21:01:42.030585デフォルトの名無しさん
2012/01/30(月) 21:11:23.370587577
2012/01/31(火) 16:47:56.33ってことは、260文字以上入れたかったら、自分でダイアログ作れってことか・・・
0588デフォルトの名無しさん
2012/01/31(火) 17:03:36.11アクセスして良いポインタかどうかを判定しようとしていて
ぬるぽ 0
初期化されてない有効なヒープ 0xcdcdcdcd
解放されたヒープ 0xfeeefeee
この他に、一見してアクセスできなそうなポインタって何かあるかな。
0589デフォルトの名無しさん
2012/01/31(火) 17:06:29.890590デフォルトの名無しさん
2012/01/31(火) 17:07:41.880xdeaddead
0xbeaffeed
0591デフォルトの名無しさん
2012/01/31(火) 18:05:29.850592デフォルトの名無しさん
2012/01/31(火) 19:51:41.310593デフォルトの名無しさん
2012/01/31(火) 20:47:10.190594デフォルトの名無しさん
2012/01/31(火) 20:50:48.030595デフォルトの名無しさん
2012/01/31(火) 21:17:34.810596デフォルトの名無しさん
2012/01/31(火) 21:23:31.080597デフォルトの名無しさん
2012/01/31(火) 21:26:01.820598デフォルトの名無しさん
2012/01/31(火) 21:29:14.360599デフォルトの名無しさん
2012/01/31(火) 22:53:25.170600デフォルトの名無しさん
2012/01/31(火) 23:44:03.99ガッすると死ぬ。
0601デフォルトの名無しさん
2012/02/01(水) 01:08:37.16DLLなどにコンパイルし直さないとだめですかね?
0602デフォルトの名無しさん
2012/02/01(水) 01:13:04.920603デフォルトの名無しさん
2012/02/01(水) 01:15:10.58http://dynobj.sourceforge.net/index.php
0604デフォルトの名無しさん
2012/02/01(水) 01:26:14.440605デフォルトの名無しさん
2012/02/01(水) 03:14:22.43ハゲワラタw
0606デフォルトの名無しさん
2012/02/01(水) 04:18:09.17std::stringを渡しても駄目、
メモリの管理も別々にやらないと駄目
0607デフォルトの名無しさん
2012/02/01(水) 04:23:39.06渡されるポインタの最初に終端のアドレス書いてもらうとかじゃないの?
んなものシステムによって違うんだから渡す側に明示してもらわないと不可能だよ
0608デフォルトの名無しさん
2012/02/01(水) 10:34:25.31__forceinlineつけてもインラインにできない?
0609デフォルトの名無しさん
2012/02/01(水) 17:03:06.18vc10とg++4.3.4でオーバーロード解決に差がありました。
#include <cstdio>
void f1(const char a[]){}
void f1(const char *const &a){}
template<typename T> void f2(const T a[]){}
template<typename T, int L> void f2(const T (&a)[L]){}
template<typename T> void f2(const T *const &a){}
extern char c[];
char d[4];
char *e;
int main(int argc, char *argv[]){
f1(c); //vc: C2668, g++: ambiguous
f1(d); //vc: C2668, g++: ambiguous
f1(e); //f1(const char *const &a), g++: ambiguous
f2(c); //vc: (const T a[]), g++: f2(const T a[])
f2(d); //vc: C2668, g++: f2(const T a[])
f2(e); //vc:(const T *const &a), g++: ambiguous
return 0;
}
char c[4] = "abc";
C++Standardでは、どれが呼び出されて、どれが曖昧になるのか教えていただけませんか?
0610デフォルトの名無しさん
2012/02/08(水) 00:10:13.87winsockを利用して飛んでくるsyslogのログをファイルに記録するごく簡単なプログラムなのですがbind()に失敗します
0x000006D9: エンドポイント マッパーから使用できるエンドポイントはこれ以上ありません。
検索してみるとポートの利用上限に達している的なことが書いてあるのですがOS再起動直後でも結果は同じでした
netstatで確認してみても上限に達しているとか、既に使われているとかではなさそうです
SOCKET sock;
WSADATA wsd;
struct sockaddr_in addr_in;
WSAStartup(MAKEWORD(2, 0), &wsd);
sock = socket(AF_INET, SOCK_DGRAM, 0);
addr_in.sin_family = AF_INET;
addr_in.sin_port = htons(514);
addr_in.sin_addr.s_addr = htonl(INADDR_ANY);
bind(sock, (struct sockaddr*)&addr_in, sizeof(addr_in)); //ここで上記の例外が発生する
ご教示お願いします・・・
0611デフォルトの名無しさん
2012/02/08(水) 00:11:28.370612デフォルトの名無しさん
2012/02/08(水) 00:26:15.56TCPで試してみたところこちらはbindには成功し、LISTENING状態になることを確認しました
が、listen()の時点で同じようにエラーメッセージは表示されました
0613デフォルトの名無しさん
2012/02/08(水) 00:51:46.16windowsっぽいけどXP? SP2?
syslogに関係ない簡単なTPでも同じなの?
あと、PythonとかでUDP通信をためすとか。
正常動作する環境を用意できるかためさなきゃ
0614デフォルトの名無しさん
2012/02/08(水) 01:01:18.32C#で同じく514/UDPでsyslogを受信するものを先に作りましたが、とにかくメモリをよく食うのでCで作り直そうと思いこの流れに
そちらでは正常に受信、記録ができたのでハードウェアやリソースの問題ではないと思うのですが・・・
0615デフォルトの名無しさん
2012/02/08(水) 21:22:27.81>bind(sock, (struct sockaddr*)&addr_in, sizeof(addr_in)); //ここで上記の例外が発生する
例外って何のことだ?
bind( ) は、エラーになったら SOCKET_ERROR を返すだけだし、WSAGetLastError( ) は、
0x000006D9 なんていう値は返さないよ。
MSDN をちゃんと読むことを薦める。
http://msdn.microsoft.com/en-us/library/ms737550(v=vs.85).aspx
ちなみに、そのコードをうちの環境 (WinXP + SP3) で試すと、bind( ) は正常終了するよ。
0616デフォルトの名無しさん
2012/02/08(水) 22:46:19.17bindの戻り値は0、WSAGetLastErrorの戻り値も0でエラーが特定できませんでした
念のためVC++2008Expressのインストールされている別のPCでも試してみましたが同様にbindが失敗しているようです
同じコードでも正常終了するということはOS側の何かの設定か、ライブラリのバージョン、配置などの問題でしょうか?
なんにせよ特定が難しそうなので今回は諦めることにします。丁寧な助言ありがとうございました
0617デフォルトの名無しさん
2012/02/08(水) 23:02:35.72> bindの戻り値は0、
だから、MSDN 読んでくれよう… orz
Return value
If no error occurs, bind returns zero.
まあ、君には特定が難しそうなのは同意なので、諦めるのもいいかも。
0618デフォルトの名無しさん
2012/02/08(水) 23:21:46.740619デフォルトの名無しさん
2012/02/08(水) 23:33:06.86まぁ解決放棄するくらいだその程度なんだろ
0620デフォルトの名無しさん
2012/02/09(木) 00:06:26.05理由以前に失敗してると考える奴は馬鹿と言うことでいいか?
0621デフォルトの名無しさん
2012/02/09(木) 00:10:08.080622デフォルトの名無しさん
2012/02/09(木) 22:10:54.74おk
0623デフォルトの名無しさん
2012/02/09(木) 22:19:28.06で成否を判定しようとする人って居るよね
0624デフォルトの名無しさん
2012/02/09(木) 22:21:47.78マルチスレッドだと死なない?
0625デフォルトの名無しさん
2012/02/09(木) 22:42:07.180626デフォルトの名無しさん
2012/02/09(木) 22:57:01.610627デフォルトの名無しさん
2012/02/10(金) 01:56:03.54inline HRESULT VerifyHRESULT(HRESULT hr) { if (FAILED(hr)) throw Win32Exception(hr); return hr; }
こういうの使いまくってるけどやめたほうがいい?
0628デフォルトの名無しさん
2012/02/10(金) 19:11:27.27それにファイル名と行番号情報入れたら俺とほぼ同じだわ
0629デフォルトの名無しさん
2012/02/11(土) 00:14:22.510630デフォルトの名無しさん
2012/02/11(土) 00:16:22.390631デフォルトの名無しさん
2012/02/11(土) 02:12:02.90typedef struct queue {
struct queue *next;
struct queue *prev;
} QUEUE;
void queue_initialize(QUEUE *queue) {
queue->prev = queue->next = queue;
}
void queue_insert_prev(QUEUE *queue, QUEUE *entry) {
entry->prev = queue->prev;
entry->next = queue;
queue->prev->next = entry;
queue->prev = entry;
}
がヘッダファイルqueue.hに書かれていて、これをよみこんでいるファイルで
#define TBIT_TCB_PRIORITY 4
typedef struct task_control_block {
QUEUE task_queue;
const TINIB *tinib;
unsigned int tstat : TBIT_TCB_TSTAT;
unsigned int priority : TBIT_TCB_PRIORITY;
} TCB;
0632デフォルトの名無しさん
2012/02/11(土) 02:12:58.96void queue_insert_tpri(TCB *tcb, QUEUE *queue) {
QUEUE *entry;
UINT priority = tcb->priority;
for (entry = queue->next; entry != queue; entry = entry->next ) {
if (priority < ((TCB *) entry)->priority) {
break;
}
}
queue_insert_prev(entry, &(tcb->task_queue));
}
とあったのですが、このqueue_insert_tpri()の具体的な動作とこの関数を簡単に試す
具体的な方法を教えてください。すいません。おねがいします。
0633デフォルトの名無しさん
2012/02/11(土) 04:10:25.13何がわからないんだ
0634デフォルトの名無しさん
2012/02/11(土) 18:03:07.19typedef struct task {
QUEUE task_queue;
int num;
} TCB;
として
int main() {
TCB tcb,t1;
tcb.num = 100;
t1.num = 10;
queue_insert_tpri(&tcb,&(t1.task_queue));
return 0;
}
とします。
コンパイルして実行すると、
$ Segmentation fault
おしえてください。
0635デフォルトの名無しさん
2012/02/11(土) 21:58:01.830636デフォルトの名無しさん
2012/02/12(日) 00:01:40.24#ifndef BBB
#define CCC
#else
#define DDD
#endif
#else
#ifndef EEE
#define FFF
#else
#define GGG
#endif
#endif
↑こういう複数条件のプリプロセッサディレクティブがあったとき、インデントはどうしてますか?
1)インデントしない
2)#の前に空白文字でインデント
3)#の後に空白文字でインデント
可読性からすればインデントしたほうがいい気がするのですが、
環境によって制約等あるのでしょうか?
0637デフォルトの名無しさん
2012/02/12(日) 00:07:09.960638デフォルトの名無しさん
2012/02/12(日) 00:13:00.23インデントなし
これだね
0639デフォルトの名無しさん
2012/02/12(日) 00:28:35.72>>638
ありがとうございます
やはりいろんなやり方があるんですね
>マクロは見にくくなるほど書かない
なるほど、そういう方針にすればそもそもインデントいらないですね
0640634
2012/02/12(日) 01:18:47.58633と635の方、ありがとうございます。
0641デフォルトの名無しさん
2012/02/12(日) 02:45:57.84整形ツールに任せる。
0642デフォルトの名無しさん
2012/02/12(日) 02:54:38.32>>636
今は整形ツールにどんなパラメーターを与えてますか?
0643デフォルトの名無しさん
2012/02/12(日) 11:02:07.97あえて std::priority_queue を使う理由は何ですか?
0644デフォルトの名無しさん
2012/02/12(日) 11:13:19.880645デフォルトの名無しさん
2012/02/12(日) 14:14:30.23サンクス。
0646デフォルトの名無しさん
2012/02/12(日) 14:28:02.85俺もサンクス。
0647デフォルトの名無しさん
2012/02/12(日) 15:03:26.42> そ そうだったのかー!! <
 ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
_,,.-‐-..,,_ _,,..--v--..,_
/ `''.v'ν Σ´ `、_,.-'""`´""ヽ
i' / ̄""''--i 7 | ,.イi,i,i,、 、,、 Σ ヽ
. !ヘ /‐- 、u. |' |ノ-、 ' ` `,_` | /i'i^iヘ、 ,、、 |
|'' !゙ i.oニ'ー'〈ュニ! iiヽ~oj.`'<_o.7 !'.__ ' ' ``_,,....、 .|
. ,`| u ..ゝ! ‖ .j (} 'o〉 `''o'ヽ |',`i
_,,..-<:::::\ (二> / ! _`-っ / | 7  ̄ u |i'/
. |、 \:::::\ '' / \ '' /〃.ヽ `''⊃ , 'v>、
!、\ \. , ̄ γ/| ̄ 〃 \二-‐' //`
0648デフォルトの名無しさん
2012/02/12(日) 15:22:03.48< >
> そ <
,.へ <. | >
‐────┬┐ \ _,,.. - ''''"" ̄`"'''7:::∠__ > な <
___,,,...-‐''"| | \ ,. '" !ヘ/::/<. の >
 ̄7 | |  ̄ / ハ, __i i:::::>! > か <
i | |  ̄ / /'! ハ /!二_ハ i´ | < | >
.| .| | | | / ,.ィ‐-V レ゛´!´.ハ`ヽイ / ノ !!!! ヽ.
| | | | i i イ「ハ !__,リ ノ | /| ⌒Y⌒Y⌒
| | | |. !/.| | ! !ソ  ̄ 〃 レ' | |
: | |. レソ〃 ,-=ニニ'ヽ. 7 ,' |
: | |. |7! i ! u / /! |
:::::::: | | / .'ゝ、_ヽ、 _ノ / / / i ,'
:::::::::: | | レヘ/,./^i,.-,r イ´レヘ/ヽ、ハノ
:::::::::::::::|______|__| r| ! ! レ^i/  ̄'7ー-、______ハ
 ̄ ̄ ̄__/___ ハ /ヘ__/// ヽ,:::::::::| |
ニ二二i -二ニ---、. ,. '⌒ヽ,r‐''"´ ̄ト、::::::/ !::::::::| |
________________ンー|.|""""`ユ ヽノ「´  ̄ `ヽ:::! ,〈:::::::::| |
 ̄ ̄ ̄ ̄ ̄ ̄  ̄二=-┐ `ヽ /:::::::::| |
0649デフォルトの名無しさん
2012/02/12(日) 15:49:48.39定数の2のべき乗で割る場合はコンパイラがビットシフトに置き換えますが
変数の除数が偶然2のべき乗になっている場合は速くなりますか?
0650デフォルトの名無しさん
2012/02/12(日) 15:51:44.38コンパイル時に除数が2の冪乗になることがわからない以上無理じゃないか?
0651デフォルトの名無しさん
2012/02/12(日) 15:52:11.25CPUで変わるから、試しに測ってごらん
0652デフォルトの名無しさん
2012/02/12(日) 15:52:46.030653デフォルトの名無しさん
2012/02/12(日) 16:12:39.320654デフォルトの名無しさん
2012/02/12(日) 16:56:20.45アセンブリソース見ればわかるんじゃね?
0655デフォルトの名無しさん
2012/02/12(日) 17:03:32.7964個分switchで分岐させれば早くなるんじゃね?
if(!(x & (x - 1)))
bitshift(v, n);
これで2のべき乗か判断できるし。
0656デフォルトの名無しさん
2012/02/12(日) 19:47:20.97Cstrisng の delete find に変わる機能がC に用意されていないでしょうか?
0657デフォルトの名無しさん
2012/02/12(日) 20:44:10.44Boostも使っていいならboost::algorithm使えばもっと楽できる。
C言語標準ライブラリにはそんなのない。
forで何とかしろ。
0658デフォルトの名無しさん
2012/02/12(日) 21:17:07.700659デフォルトの名無しさん
2012/02/12(日) 22:58:37.59strcpyじゃ難しくないか?
まず問題にならんだろうけど。
0660デフォルトの名無しさん
2012/02/13(月) 06:00:53.91型Tは何になるのでしょうか?
say100はただの関数なのでクラスとは違うと思うのですが、
実際にどう処理されているのかが分かりません。
よろしくお願いいたします。
----------------------------------
#include <iostream>
template<class T>
void Test( T func )
{
func( );
}
void say100( ){ std::cout << 100 << std::endl; }
int main( )
{
Test( say100 ); // 出力100
return 0;
}
0661デフォルトの名無しさん
2012/02/13(月) 06:18:14.740663デフォルトの名無しさん
2012/02/13(月) 13:38:14.33という場合はどう書けばいいんでしょうか?
class Hoge {
Fuga mF1;
Fuga mF2;
Fuga mF3;
public:
void DoSomething(void){
mF3 = mF1 + mF2;
}
};
int main(void){
Hoge h;
Fuga f1, f2, f3;
h.DoSomething(); // okにしたい
f3 = f1 + f2; // errorにしたい
return 0;
}
0664デフォルトの名無しさん
2012/02/13(月) 13:43:04.74friendにでもすればいいんじゃ?試してないけど
0665デフォルトの名無しさん
2012/02/13(月) 21:37:12.98vはstd::vectorで、データが入ってます。
targetは検索値です。
typedef std::vector<int>::iterator Index;
Index lo = v.begin();
Index hi = v.end();
while (lo <= hi ) {
Index mid = (lo + hi) / 2;
if (target <= *mid) {hi = mid - 1;}
if (target >= *mid) {lo = mid + 1;}
}
Index pos = lo - 1;
0666デフォルトの名無しさん
2012/02/13(月) 21:43:53.410667デフォルトの名無しさん
2012/02/13(月) 21:44:00.060668デフォルトの名無しさん
2012/02/13(月) 21:53:53.23Index mid = begin() + ((lo-begin()) + (hi-begin())) / 2
なにこれきめえ
0669デフォルトの名無しさん
2012/02/13(月) 22:22:33.08ありがとうございました。
0670デフォルトの名無しさん
2012/02/14(火) 00:47:15.90boolean : m_bZoom
int, uint : m_nCount
pointer : m_pHandle
float : m_fValue ?
double : m_dValue ?
こんな感じだったと思うけど
enum型の場合はどんな感じで書いてる?
m_eState とか、Typeのtでm_tStateとか
それとも m_nXxxx みたいな書式なのかな
名前の付け方で迷ってしまったので助言くだしあ
0671デフォルトの名無しさん
2012/02/14(火) 00:50:33.230672デフォルトの名無しさん
2012/02/14(火) 00:52:37.87ハンガリアン叩きが来る!死にたくない!
それはそれとして、どうせ int だし m_nXxxx でいいんじゃないか?enumuerate は明らかに number から派生した単語だし
0673デフォルトの名無しさん
2012/02/14(火) 00:52:43.980674デフォルトの名無しさん
2012/02/14(火) 00:56:49.52レスありがと
旧世代の感じがするのは否めないんだけど
このプロジェクト内では書式を合わせてやりたいのよ
最近はC#やってたせいか余計にenumにも同じように接してやりたくなってしまって
少なくともenumには m_State みたいなのが一番自然ってことでおk?
0675デフォルトの名無しさん
2012/02/14(火) 00:59:01.81みんなはどう書いてるの?
そもそもハンガリアンなんて使ってないの?
0676デフォルトの名無しさん
2012/02/14(火) 00:59:55.310677デフォルトの名無しさん
2012/02/14(火) 01:11:49.31そもそも m_ 自体が意見分かれそうだね
一応スタイルを継承してるだけなんだけどさ
m_xxxx
m_nXxxx
m_Xxxx
あー頭がこんがらがってきた 夜中にプログラムなんて作るもんじゃないねw
よく考えたらC++の中ではenumって型というよりはintの派生みたいなもんなんだよね。
C#の雰囲気でC++に接してたのがそもそもの間違いなのかも。
それに、どれが正解とか言うものでもないように思うので、
今回は>>672さんの通りにやることにする。
みんな、ありがと。
0678デフォルトの名無しさん
2012/02/14(火) 01:14:54.96外から触れるようにすることなんてめったにないのだから
0679672 ◆QZaw55cn4c
2012/02/14(火) 01:17:24.99pNode, ppRoot, pppArgForFork, ref_pMap とかやっているうちにアマチュアには手に負えないことを悟りました。
0680デフォルトの名無しさん
2012/02/14(火) 09:35:27.10とかいう変数になって、
恐ろしいことにそれらすべてが
1つの関数に出現する
0681デフォルトの名無しさん
2012/02/14(火) 11:34:38.93ページの中でもう使ってるデータが全て不要になった事をWindowsが知ってから
�@直ちに
�ACPUが暇になるか、メモリの使える残りが危急の時
0682デフォルトの名無しさん
2012/02/14(火) 12:14:55.070683デフォルトの名無しさん
2012/02/14(火) 15:22:13.350684デフォルトの名無しさん
2012/02/14(火) 15:30:52.010685デフォルトの名無しさん
2012/02/14(火) 16:50:19.13char * erase(char * str, size_t pos, size_t nChar)
{
const char * rest = str + pos + nChar;
const char * end = strchr(str, '\0');
if (rest > end) rest = end;
strcpy(str + pos, rest);
return str;
}
int find(const char * str, const char * findStr, unsigned pos)
{
const char * rtn = strstr(str + pos, findStr);
if (rtn) return rtn - str;
return -1;
}
0686デフォルトの名無しさん
2012/02/15(水) 05:07:53.38↑この例外指定の記述はVCの独自仕様なんでしょうか?BCCで通らないのですが。
0687デフォルトの名無しさん
2012/02/15(水) 05:13:31.300688デフォルトの名無しさん
2012/02/15(水) 05:20:01.54意味としては何も指定しないのと同じですか?
void f() {}
0689デフォルトの名無しさん
2012/02/15(水) 05:34:05.130690デフォルトの名無しさん
2012/02/15(水) 05:37:23.700691デフォルトの名無しさん
2012/02/15(水) 09:26:43.86すぐに構造体をmalloc等で確保しないとポインタ先の構造体って壊れる可能性ありますよね?
0692デフォルトの名無しさん
2012/02/15(水) 10:26:26.15普通はdllから渡されたポインタを引数にして構造体を破棄する関数がdllに用意されてるだろ
もしそうならその関数を呼び出すまで構造体が壊されることはない
そうでないならそのdllは問題ありそうだから使わないほうがいいかもしれないぞ
0693デフォルトの名無しさん
2012/02/15(水) 10:47:24.60とりあえず保護しなくても構造体は確保されているのですね。
破棄する関数は、以前のバージョンでは存在したのですが
今のバージョンには無くなっていました。
0694デフォルトの名無しさん
2012/02/15(水) 10:54:49.70その情報だけでは(一般的なDLLの世界の話として保障なんて無いので)なんともいえない。
DLL の説明資料を探すか、提供元に問い合わせが正解かな?
0695デフォルトの名無しさん
2012/02/15(水) 10:59:17.61それで要領を得なかったら危ないから使うな
0696デフォルトの名無しさん
2012/02/15(水) 11:25:38.11抱いて///
0697デフォルトの名無しさん
2012/02/15(水) 11:49:13.74え?標準だろ。 BCC で使うとどうなるの?
0698デフォルトの名無しさん
2012/02/15(水) 12:04:34.96提供元は「サンプルが動いているから大丈夫」としか言わないんです。
intとunsigned intが混在してそのままキャストしたり、void *を多用したり、構造体の中にポインタのポインタがあって値を見るとエラー出てたり
時々暴走する危険なサンプルですが。
0700デフォルトの名無しさん
2012/02/15(水) 12:10:58.540701686
2012/02/15(水) 12:16:38.70ググるとVCが例外仕様をスルーしてるとよく出てくるので
VCが悪いんだろうと一方的に思ってましたが、
確かにそうかもしれません。
C++の仕様では標準なんでしょうか?規格書見る力もなくて・・・
0702デフォルトの名無しさん
2012/02/15(水) 18:31:23.4215.4 Exception specifications よく見ろ
0703デフォルトの名無しさん
2012/02/15(水) 23:03:18.77ステップ実行ができてMakefileが書けるやつがいいです。
UbuntuかWindowsで動くやつでお願いします。
0704デフォルトの名無しさん
2012/02/15(水) 23:21:55.760705デフォルトの名無しさん
2012/02/15(水) 23:27:58.080706デフォルトの名無しさん
2012/02/16(木) 15:40:46.170707デフォルトの名無しさん
2012/02/16(木) 22:09:33.710708デフォルトの名無しさん
2012/02/17(金) 13:28:11.450709デフォルトの名無しさん
2012/02/17(金) 14:46:25.160710デフォルトの名無しさん
2012/02/17(金) 16:16:25.160711デフォルトの名無しさん
2012/02/18(土) 17:27:23.540712デフォルトの名無しさん
2012/02/18(土) 20:15:19.140713デフォルトの名無しさん
2012/02/19(日) 00:26:51.230714デフォルトの名無しさん
2012/02/19(日) 21:42:38.34iteratorが得られないと不便なのに。
0715デフォルトの名無しさん
2012/02/19(日) 22:00:13.03そういうことを気にするときはlower_bound,upper_bound,equal_rangeがある
0716デフォルトの名無しさん
2012/02/21(火) 16:15:05.62誰も答えて無くて埋もれてたやつなんだけど・・・
次のような基本クラスと派生クラス(クラス階層)を作成
1:飛行機の情報を格納するクラス階層を作成
まずairshipという基本クラスを作成
airshipクラスには搭乗可能人数と積載貨物可能量を格納(単位はポンド)
また搭乗可能人数と積載貨物可能量を表示するメンバ関数を作成
2:次にairshipからairplaneとballoonという2つの派生クラスを作成
airplaneクラスには推進機構の種類(プロペラまたはジェット)と
航続距離(単位はマイル)を格納
balloonクラスには気球を浮上させる為に使用する気体(水素またはヘリウム)と
最大高度(単位はフィート)を格納
3:main関数でこのクラス階層を使うプログラムを作成
*airshipとballoonのオブジェクトを作成して、その設定内容を表示する
0717デフォルトの名無しさん
2012/02/21(火) 18:07:58.02変数名とか関数名とか
ひな形あげるからそこの変更は自分でやってみ
http://ideone.com/ttPuv
0718デフォルトの名無しさん
2012/02/21(火) 21:09:32.120719デフォルトの名無しさん
2012/02/21(火) 22:51:46.33Cを初めて2か月だったり
状況いろいろ考える暇あったら、やればいいのにな
0720デフォルトの名無しさん
2012/02/21(火) 23:46:21.58自分でやる気が無いならとっとと学校をやめて別の職種で働けよ。
出来ない、やる気も無いならしがみつく意味が無いだろう。
0721デフォルトの名無しさん
2012/02/22(水) 00:27:35.270722デフォルトの名無しさん
2012/02/22(水) 09:28:25.300723デフォルトの名無しさん
2012/02/22(水) 12:05:21.020724デフォルトの名無しさん
2012/02/23(木) 23:22:11.59DirectXで画像を表示するのならできると思うのですが、これだと動作は遅いのでしょうか?
とにかく画像をダブルクリックしたらすぐに画像が見れるようなソフトをc/c++で作りたいです
0725デフォルトの名無しさん
2012/02/23(木) 23:58:33.37ディスクをSSDに換装する方が速いと思うが
0726デフォルトの名無しさん
2012/02/24(金) 00:20:14.09それどうしてC++Directxでやるん?
C#で即効でつくれるやん
0727デフォルトの名無しさん
2012/02/24(金) 00:40:51.04動作を速くしたいのでc++の方が良いのかなと思ったのですがどうなのでしょうか?
.Netは遅いと聞いたことがあるのですが
0728デフォルトの名無しさん
2012/02/24(金) 01:04:59.10そりゃネイティブのほうが早いは早いと思うけど、
体感できるほど早いかといわれれば微妙だろう
てかC#でなら即効で作れるんだから
作ってそれで満足できないかどうか確かめてみればいい
0729デフォルトの名無しさん
2012/02/24(金) 01:27:20.01その後はバイナリと大差はない。
ネイティブのバイナリに変換しているからだ。
Javaのように仮想マシーン上で動くのでない。
0730デフォルトの名無しさん
2012/02/24(金) 01:32:41.79.NET Framework - Wikipedia
.NET Frameworkにおいてはあらゆる言語で記述されたプログラムが共通中間言語と呼ばれる中間言語にコンパイルされる。
マイクロソフトの実装では、この中間言語はJITコンパイラによって実行時にネイティブコードにコンパイルされる。
0731デフォルトの名無しさん
2012/02/24(金) 04:50:10.790732デフォルトの名無しさん
2012/02/24(金) 05:07:07.180733デフォルトの名無しさん
2012/02/24(金) 06:44:06.600734デフォルトの名無しさん
2012/02/24(金) 08:13:19.720735デフォルトの名無しさん
2012/02/24(金) 12:06:22.040736デフォルトの名無しさん
2012/02/24(金) 21:24:31.180737デフォルトの名無しさん
2012/02/25(土) 03:32:10.79メモ帳から読み込んだ文章を、1つの大きなchar配列に入れ、
改行コードの\r\nの代わりに\0を入れています。
(\r\nだと、繋げた時に1行分の長さをstrlenで計れないので\0を。)
これを、1行描画したらstrlenで長さを取り、間仕切り(\0)の分+1して
次の行を描画する としたいのですが、
strlenで長さは正しく取れるのに、
文字列を取ろうとすると、\0から後ろはおかしな結果になってしまいます。
\0を間仕切りに使うのはかなり不味い事なのでしょうか?
それとも私が何か勘違いしてミスっているのか…。
何かご助言頂けますと幸いです。
0738デフォルトの名無しさん
2012/02/25(土) 03:54:27.76なら英語だけで試してみるのがよし
0739デフォルトの名無しさん
2012/02/25(土) 05:08:23.64こんな感じ?
ttp://ideone.com/goDnl
0740デフォルトの名無しさん
2012/02/25(土) 12:39:13.15#include <string.h>
static char const buf[256] = "hello\nworld\nfoo\nbar\nbaz";
int main(void) {
char const * p = buf ;
char const * q = 0 ;
int flag = 1 ;
while(flag) {
q = strchr(p, '\n') ;
if(q) {
int const length = q - p ;
printf("%.*s\n", length, p) ;
p = q + 1 ;
}
else {
puts(p) ;
flag = 0 ;
}
}
return 0 ;
}
0741デフォルトの名無しさん
2012/02/25(土) 13:58:02.35英語だけでも確認すべきでしたね; ありがとうございます。
>>739->>740
コードありがとうございます。
何が間違っていたのか・・諦めて他の強引な手段に作り直してしまいましたが、
strlenに頼らなくても長さは取れる・・コードも色々勉強になります。
ありがとうございました。
スマートにする為に一部取り込ませて頂きたいと思います。
0742デフォルトの名無しさん
2012/02/25(土) 20:19:55.69MoveWindow(他, widh,height 他,)とするとウインドウ自体のサイズになってしまうのですが
ウインドウの枠のサイズなどを足し引きしないといけないと思うのですがどうすればいいでしょうか?
0743デフォルトの名無しさん
2012/02/25(土) 20:22:00.200744デフォルトの名無しさん
2012/02/25(土) 21:14:43.15ありがとうございます
2D1_SIZE_F size = g_bitmap->GetSize();
RECT rect2 = {0,0,int(size.width),int(size.height)};
AdjustWindowRect(&rect2,WS_BORDER,false);
MoveWindow(phwnd,100,100,rect2.right-rect2.left,rect2.bottom-rect2.top,TRUE);
としてもウインドウの外枠のサイズが画像のサイズになってしまうのですがどこか間違っているでしょうか?
0745デフォルトの名無しさん
2012/02/25(土) 21:28:51.03ありがとうございました!
0746デフォルトの名無しさん
2012/02/27(月) 11:16:40.210747デフォルトの名無しさん
2012/02/28(火) 21:49:30.43func()は最適化されてるのにfunc1()は最適化されませんでした。なんででしょうか。
unsigned long long func(unsigned long long a) {
if (a == 1 || a == 0) { return 1ULL; }
else { return a * func(a - 1ULL); }
}
double func1(double a) {
if (a < 1.001) { return 1.0; }
else { return a * func1(a - 1.0); }
}
最適化されてるかどうかは、アセンブラ読めないんで、ネットを参考にして、それぞれの呼び出しの前後でスタックがどれくらいつかわれてるか
(あらかじめスタックの下の方に0xCCCCCCCCを書いておいて呼び出しが終わった後にそれが残ってるか
をチェック)をしました。
どうかよろしくお願いします。
0748デフォルトの名無しさん
2012/02/28(火) 22:06:53.13どっちも自分自身を呼び出したあとに a をかけてるから末尾再起になってないと思うけど。
VC++で見てたら、やっぱりどっちも最適化されてなかった。
0749デフォルトの名無しさん
2012/02/28(火) 22:08:56.57$ gcc TailRecursionRemove.c -save-temps -O4
$ grep call TailRecursionRemove.s
call func1
call strtoll
call __printf_chk
call __printf_chk
call func1
0750デフォルトの名無しさん
2012/02/28(火) 22:34:05.31#include "stdio.h"
#include "stdlib.h"
unsigned long long func(unsigned long long a) {
if (a == 1 || a == 0) { return 1ULL; }
else { return a * func(a - 1ULL); }
}
double func1(double a) {
if (a < 1.001) { return 1.0; }
else { return a * func1(a - 1.0); }
}
int main(int ac, char **av) {
unsigned long long arg = atoll(av[1]);
double arg1 = arg;
unsigned long long a = func(arg);
double a1 = func1(arg1);
printf("%llu ! = %llu\n", arg, a);
printf("%f ! = %f\n", arg1, a1);
return 0;
}
0751デフォルトの名無しさん
2012/02/28(火) 22:36:57.54ありがとうございます。そうですか...
じゃあやっぱりアセンブラみてfuncの場合にgccが何やってるかみないと
だめですね。
0752デフォルトの名無しさん
2012/02/29(水) 01:23:23.79bool Dummy::Hoge(std::vector<BYTE> &buffer){
DWORD ReadByte;
BYTE *pBuffer = &buffer[0];
foo(pBuffer, ReadByte);
if(ReadByte > 0)
{
return true;
}
return false;
}
元のソースから部分だけ引っ張ってきたものですが、
“BYTE *pBuffer = &buffer[0];”の部分で
Expression: vector subscript out of range
というエラーが出てしまいます。
こちらのソース自体が2002年ぐらいに作られたらしく、
Webで同様のエラーを探した際もVS2003までは通ってたという記述がありました。
どうやらvector::operator[]がエラーを出していることまではわかったのですが、
そこから先の対処がわからずにいます。
こちらの関数と同様な形で引数として使うので、
エラーにならないようvector<BYTE>からBYTE*に渡せればいいのですが、
どういった対応がありますでしょうか。
よろしくお願いします。
0753デフォルトの名無しさん
2012/02/29(水) 01:29:03.070754デフォルトの名無しさん
2012/02/29(水) 01:29:56.480755デフォルトの名無しさん
2012/02/29(水) 01:30:15.33ちゃんと必要なサイズにresizeしなさい
0756デフォルトの名無しさん
2012/02/29(水) 09:17:44.52横レスですまないが、
>“BYTE *pBuffer = &buffer[0];”の部分で
BYTE *pBuffer = buffer;
じゃ駄目なん?
0757デフォルトの名無しさん
2012/02/29(水) 09:52:30.22bufferが空なので実行時の添字チェックに引っかかっている。
bufferに中身がなければ、先頭のアドレスが定まらないので
有効なポインタを返すことができない。
当座の回避法としてはこんな感じか。
bool Dummy::Hoge(std::vector<BYTE> &buffer)
{
DWORD ReadByte = 0;
if (!buffer.empty())
foo(&buffer[0], ReadByte);
return (ReadByte > 0);
}
>>756
配列ならそれでもいいけどvectorでは不可。
0758デフォルトの名無しさん
2012/02/29(水) 10:47:08.580759デフォルトの名無しさん
2012/02/29(水) 11:11:21.020760デフォルトの名無しさん
2012/02/29(水) 11:38:58.570761デフォルトの名無しさん
2012/02/29(水) 11:43:14.98戻りで読めたサイズに書き換える参照渡しだったり
なんか TCPの読み込みっぽい形だな とゲスパー
0762デフォルトの名無しさん
2012/02/29(水) 11:56:17.92コード書き直したほうがいいと思うけど
うちも昔>>757みたいな回避やったわ
0763デフォルトの名無しさん
2012/02/29(水) 22:17:17.790764デフォルトの名無しさん
2012/02/29(水) 22:23:47.560765デフォルトの名無しさん
2012/02/29(水) 22:56:47.360766デフォルトの名無しさん
2012/02/29(水) 23:13:46.290767デフォルトの名無しさん
2012/03/01(木) 00:04:39.57中で再確保とかしてたら最悪だよな
0768752
2012/03/01(木) 00:40:38.84上記の部分についてはvectorをresize()することで回避できました!
ただ、こちらは自分の書いたソースではなく貰い物で、
別の箇所でいくつも
vector<CLASS> hogehoge
CLASS *hoge = &hogehoge[0];
みたいなことをやっていらっしゃいまして……。
今までメインでやってきたのがC#で、
初期化せずポインタを渡すなんて使い方は想像つきませんでした…。
0769デフォルトの名無しさん
2012/03/01(木) 00:45:14.05素人が高級言語の感覚で使うと周りがこまる
0770デフォルトの名無しさん
2012/03/01(木) 07:15:33.160771デフォルトの名無しさん
2012/03/01(木) 07:51:23.340772デフォルトの名無しさん
2012/03/01(木) 15:31:45.47A classのprivateで
DWORD WINAPI ThreadFunc(LPVOID vdParam);
void thread();
として
DWORD WINAPI A::ThreadFunc(LPVOID vdParam){Aのprivateメンバなどを使った処理}
void thread(){CreateThread(NULL,0, &A::ThreadFunc,NULL, 0, &dwThreadId);}
という風にしたのですが
A::ThreadFunc' : 関数が値を戻すように宣言されていますが、関数定義に 'return' ステートメントがありません。
CreateThread' : 3 番目の引数を 'DWORD (__stdcall A::* )(LPVOID)' から 'LPTHREAD_START_ROUTINE' に変換できません。
となります。どうすれば良いのでしょうか?
0773デフォルトの名無しさん
2012/03/01(木) 15:42:34.760774デフォルトの名無しさん
2012/03/01(木) 15:45:49.270775デフォルトの名無しさん
2012/03/01(木) 15:46:24.840776デフォルトの名無しさん
2012/03/01(木) 15:50:02.73関数だけしか受け取らない場合がちょっと困る
グローバルにマップするしかないし
0777デフォルトの名無しさん
2012/03/01(木) 16:04:42.03ThreadFunc' : 'static' をメンバ関数の定義に使ってはいけません。 となりました (´;ω;`)
それにThreadFuncの最後にreturn 0;としてるのに 'return' ステートメントがありませんとなります(´;ω;`)
0778デフォルトの名無しさん
2012/03/01(木) 16:11:49.93DWORD WINAPI A::ThreadFuncこっちじゃなくて
DWORD WINAPI ThreadFunc(LPVOID vdParam)こっちだけにつけろ
0779デフォルトの名無しさん
2012/03/01(木) 16:13:00.27class A {
static DWORD WINAPI ThreadFunc(LPVOID vdParam);
};
定義
DWORD WINAPI A::TreadProc(LPVOID vdParam)
{
// 呼び出される本体 非static なメンバは直接参照できない
// なぜなら this ポインタが居ないから
return xxx;
}
>>777
> それにThreadFuncの最後にreturn 0;としてるのに 'return' ステートメントがありませんとなります
{ の対応が狂ってるとかは無いの?
0780デフォルトの名無しさん
2012/03/01(木) 16:27:59.13>>779
ありがとうございます
returnの方は途中のエラー終了でretun;となってた所をreturn 0;にしたら消えました
ヘッダの方のThreadFuncにstaticをしたのですが
静的でないメンバ 'AA::○○' への参照が正しくありませんといっぱい出ました
0781デフォルトの名無しさん
2012/03/01(木) 16:30:24.29CreateThreadでvdParamにthis渡してそっから触ればいい
0782デフォルトの名無しさん
2012/03/01(木) 17:06:48.25ThreadFunc(A vdParam){A.メンバ〜}
として
CreateThreadの第4引数にthisと入れて第3引数をreinterpret_cast<LPTHREAD_START_ROUTINE>としたら通りました
0783デフォルトの名無しさん
2012/03/01(木) 17:24:50.340784デフォルトの名無しさん
2012/03/01(木) 17:26:46.12vdParam.メンバを使った関数で0xc0005みたいなアクセス違反が起こるのですが
0785デフォルトの名無しさん
2012/03/01(木) 17:45:33.92static DWORD WINAPI CallBackThreadFunc(LPVOID vdParam);
DWORD dwThreadId;
virtual DWORD ThreadFunc() { return 0; }
public:
void thread() { CreateThread(NULL,0, CallBackThreadFunc, this, 0, &dwThreadId); }
};
DWORD WINAPI A::CallBackThreadFunc(LPVOID vdParam)
{
return reinterpret_cast<A*>(vdParam)->ThreadFunc();
}
0786デフォルトの名無しさん
2012/03/01(木) 17:53:54.140787デフォルトの名無しさん
2012/03/01(木) 17:57:20.76static_castでおk
0788デフォルトの名無しさん
2012/03/01(木) 18:15:07.67>>785のようにしてみて、CallBackThreadFuncA* vdParam)としたりvdParam->メンバとしたのですが
CreateThread' : 3 番目の引数を 'DWORD (__stdcall *)(DemoApp *)' から 'LPTHREAD_START_ROUTINE' に変換できません
となります。どうすればいいでしょうか?
0789デフォルトの名無しさん
2012/03/01(木) 18:17:05.190790デフォルトの名無しさん
2012/03/01(木) 18:21:45.55>>785 のは
API に渡した関数は API が要求している型(LPVOID を引数にとり、DWORD を返す関数)のままとし、
API に渡した関数の中で 関数の引数を キャストしてる
0791デフォルトの名無しさん
2012/03/01(木) 18:28:33.76といっぱい出ます。どうやればアクセスできるのでしょうか
0792785
2012/03/01(木) 18:33:55.74メンバ変数にアクセスしつつ実装記述する側が ThreadFunc
って 分離しといたのにorz
>>787 �d
C風cast しか理解できてない俺なのであった(dynamic_cast が必要にならないようにこねくり回す)
0793デフォルトの名無しさん
2012/03/01(木) 18:41:47.62できました
ありがとうございました
0794デフォルトの名無しさん
2012/03/01(木) 18:53:23.63いっしょに仕事したくないね
0795デフォルトの名無しさん
2012/03/01(木) 19:14:27.08int i, *p = new int(1);
cout << &i << endl << p << endl;
0x7fff281c570c
0x98d010
0796デフォルトの名無しさん
2012/03/01(木) 19:17:01.77newはヒープから確保する
0797デフォルトの名無しさん
2012/03/01(木) 19:52:29.23ヒープは0x98d010あたりにあるということですね。
ありがとうございました。
0798デフォルトの名無しさん
2012/03/01(木) 20:21:42.87おれもローカルでstaticでない変数をauto変数って書いてたけど、C++では別の意味になったから使えなくなった。
0799デフォルトの名無しさん
2012/03/01(木) 20:51:05.080800デフォルトの名無しさん
2012/03/01(木) 21:32:26.47struct A{
void func(void);
void func_a(void);
};
struct B{
void func(void);
void func_b(void);
};
class SugoiClass{
public:
void func_s(void);
A a;
B b;
};
SugoiClass x;
x.func_a(); // x.a.func_aが呼ばれる
x.func_b(); // x.b.func_bが呼ばれる
x.func(); // x.a.funcが呼ばれる
x.func_s(); // x.func_sが呼ばれる
x.func_x(); // コンパイルエラー
のように、いくつかのクラスに優先順位をつけて関数があればそれを呼び
見つからなければ次のクラスを探しに行く、みたいなことがやりたいのですが
0801デフォルトの名無しさん
2012/03/01(木) 21:34:26.74C++0xもOKです
実装方法は問いません
SugoiClassはAやBを継承してもインスタンスを持っても構いません
0802デフォルトの名無しさん
2012/03/01(木) 21:44:35.030803デフォルトの名無しさん
2012/03/01(木) 21:46:24.63public:
void func_a(void) { a.func_a(); }
// ry
};
0804デフォルトの名無しさん
2012/03/01(木) 21:55:17.710805デフォルトの名無しさん
2012/03/01(木) 21:59:09.61そのメンテをいくつものクラスでやりたくないのです
0806デフォルトの名無しさん
2012/03/01(木) 21:59:35.82やっぱりそれしかないですかね
今も半分マクロで作っているのですが
0807デフォルトの名無しさん
2012/03/01(木) 22:01:24.59最初からやり直しなさい
0808デフォルトの名無しさん
2012/03/02(金) 00:12:01.65ありがとう
0809デフォルトの名無しさん
2012/03/02(金) 10:08:29.74質問:std::ifstreamのread関数でstd::stringにファイルの読み出しを行いたい
read関数の第一引数(データの受け取り)にchar*を渡す必要があり、
string型でchar*に相当するものを考えると、むしろそのまま変数を渡すくらいかと思ったのですが、
当然型が違うのでコンパイルが通りません。
当たり前かもしれませんが、強引に&string[0]のように渡しても、コンパイルこそ通れどうまく動きません。
const char*に関してはc_str()関数を使えば問題ないのですが
char*を要求されたときstring型で上手く実現する方法を教えていただきたいです。
0810デフォルトの名無しさん
2012/03/02(金) 10:11:48.53char配列で受けてstringに渡したら?
std::getlineで片付くならそれで
0811デフォルトの名無しさん
2012/03/02(金) 10:17:41.66やはりそういう方法が普通ですかね
readを小分けにして行うつもりで、毎回読み出す長さがが違うので
できればstringの変数ひとつでできれば見やすいかな程度のものなので・・・
とても迅速な回答ありがとうございます
0812デフォルトの名無しさん
2012/03/02(金) 10:39:50.09「関数ポインターでなく、関数オブジェクトを渡す」というのがありますが、
なぜ改善になるのか判る方はいらっしゃいますか?
やってることは単純な数値比較だけに思えるので、大差が付くようには見えないのですが。
ttp://en.wikibooks.org/wiki/Optimizing_C%2B%2B/Writing_efficient_code/Performance_improving_features
0813デフォルトの名無しさん
2012/03/02(金) 11:16:29.94そういう場合に比較一回の差はごく僅かでも全体として多少の差が出てくるです
あくまで最適化の話なのでqsort使っちゃダメというほどでもない
0814デフォルトの名無しさん
2012/03/02(金) 11:20:59.87コールバックする側でアドレス読んでそこに飛んで処理して戻るということを繰り返すのでオーバーヘッドが大きい
オブジェクトだと呼び出す処理が静的に解決されinline展開されることが期待できるのでこのオーバーヘッドがなくなり早くなる
0815デフォルトの名無しさん
2012/03/02(金) 11:29:01.49>813-814も書いているけど、データ量が多いと馬鹿にならない差になるよ。
0816デフォルトの名無しさん
2012/03/02(金) 11:43:50.24read()は恐らく、速度優先読み込み的なニュアンスなんだろう。
ラッパを作るならこんな感じかね。EOFに達したときの処理をしていないけど。
# それ考えると、低レベルI/Oみたいに読み込めたサイズを返してくれればいいのにね。
std::string foo(std::ifstream & ifs, unsigned size)
{
char * buffer = new char[size];
ifs.read(buffer, size);
std::string rtn(buffer, size);
delete[] buffer;
return rtn;
}
0817デフォルトの名無しさん
2012/03/02(金) 11:46:11.41関数ポインタを渡したからってインライン展開がまったく期待できなくなるわけじゃないよね。
展開してくれないコンパイラが多い(多かった?)ってだけで。
0818デフォルトの名無しさん
2012/03/02(金) 11:50:39.200819デフォルトの名無しさん
2012/03/02(金) 12:46:16.94利用するときに毎回ドキュメントで安全にキャストできるか調べたりnumeric_limitsでオーバーフローチェックしたりめんどくさすぎるんだけど
0820デフォルトの名無しさん
2012/03/02(金) 14:42:10.58そのクラスを受ける少し大きめのテンプレートクラスを書いてみるとわかると思う
0821デフォルトの名無しさん
2012/03/02(金) 14:50:34.77どのようなゲームを作れば言語を覚えやすいですか?
シューティングは苦手なので出来ればソレ以外でお願いします
0822デフォルトの名無しさん
2012/03/02(金) 14:59:05.50こういうとき確かにsizeの型をどうしようか迷うね
vector::size_type、std::streamsize、もしくはistream::pos_type?
0823デフォルトの名無しさん
2012/03/02(金) 15:27:45.02STG以外で挙げろというなら、◯?ゲーム。
それが出来たら、対コンピュータ戦が出来るようにしてみる(○?ゲームの打ち筋はググればすぐに出てくる)とか、
あるいは少しルールの複雑な五目並べに進んでみるというのも面白い。
もっとコンピュータゲームっぽく、キャラやオブジェクトを動かしてみたいというなら、倉庫番やポンなんかも良さそう。
ただ、こちらは初めてのプログラミングにはちょっと難しいかもしれない。
http://www.youtube.com/watch?v=LPkUvfL8T1I
まあ、STGはアクションゲームの基礎が詰まってるのと、
「キャラが動く」「弾を打つ」「敵が消える」という、見た目にも分かりやすい(=モチベが上がりやすい)要素が揃ってるから、
インベーダーゲーム的なものに手を出してみるのもアリなんじゃないかな。
0824823
2012/03/02(金) 15:29:08.470825デフォルトの名無しさん
2012/03/02(金) 15:42:13.22助言ありがとうございます
とりあえず妄想をネタ帳に書いたあと○×ゲーム→倉庫番の順にやってみようと思います
3Dで!
0826デフォルトの名無しさん
2012/03/02(金) 15:44:31.880828デフォルトの名無しさん
2012/03/02(金) 15:59:01.99馴染みのないゲームだったのでぐぐってみましたが
すみません、そういうの思いつけるほど頭良くないのです(;´Д`)
0829デフォルトの名無しさん
2012/03/02(金) 16:06:42.35std::size_tが正解だ
これには整数typedefの間を取り持つ翻訳者的な役割があるからね
std外では知らないけどstd内ならsize_tで間違いは起こらない
0830デフォルトの名無しさん
2012/03/02(金) 16:22:29.80答えが常に一定の、「もっと大きいです」「小さいです」とかのやつ?
0831デフォルトの名無しさん
2012/03/02(金) 20:43:29.76↑VC++2010でこのエラー頻発するんですが、回避方法ありますか?
大丈夫なときは全然出ないんだけどなー
0832デフォルトの名無しさん
2012/03/02(金) 21:12:43.15LNK1168でググったら、実行中のプロセスを終わらせろって書いてあるけど、そういうのじゃなくて?
0833デフォルトの名無しさん
2012/03/02(金) 21:21:28.46同じ環境で同じコードを実行させて、毎回同じ手順でプログラムを終了させています
でもなんでかエラーが出る時と出ない時の差がすごいので聞きに来ました。
自分もググってプロセス終了の事は知ったのですが、タスクマネージャ見ても出てこないんです。
0834デフォルトの名無しさん
2012/03/02(金) 21:24:35.02processExplorerあたりでつかんでるプロセス見つければいい
0835デフォルトの名無しさん
2012/03/02(金) 21:27:25.72assertマクロで!!(エクスクラメーションが2つ並んでいる)コードを見かけたんですが
否定の否定ってことならこれ意味ないですよね?どんな意図なんでしょう・・・?
0836デフォルトの名無しさん
2012/03/02(金) 21:27:54.75おお、なるほど
再起動地獄から抜けられそうです。ありがとうございました
0837デフォルトの名無しさん
2012/03/02(金) 21:31:55.75int n = 0;
bool b = !!n; // b == false;
bool型に変換できる
0838デフォルトの名無しさん
2012/03/02(金) 21:33:51.360839デフォルトの名無しさん
2012/03/02(金) 21:37:10.900840デフォルトの名無しさん
2012/03/02(金) 21:42:02.85operator使いはこれだから糞なんだ
シネシネシネシネシネ
シネシネシネシネシネ
シネシネシネシネシネ
シネシネシネシネシネ
シネシネシネシネシネ
シネシネシネシネシネ
assert(is_good(obj));
って書けよくそがイラつくぜぇ
0841デフォルトの名無しさん
2012/03/02(金) 22:14:44.69・・・あーそうなのか・・・(まだよくわかってない
正確には覚えてないけどassert(!!hoge || (nantchara))ってな感じだった
0842デフォルトの名無しさん
2012/03/03(土) 00:15:34.04大雑把に言うと、Cは[true/false]が[0以外/0]のときと[1/0]のときがあって、
[0以外/0]を[1/0]に変換したいときに!!nに使う。
assert()に入れる式は、[0以外/0]でOKなんで、!!を使うのは無意味。
0843デフォルトの名無しさん
2012/03/03(土) 00:17:59.70ヒット&ブローのことじゃね?
0844デフォルトの名無しさん
2012/03/03(土) 00:20:06.17operator! しか用意してなかったら無意味じゃないだろ。
そういうことも想定して用意されるテンプレート関数ならありがちだ。
0845デフォルトの名無しさん
2012/03/03(土) 00:24:38.380846デフォルトの名無しさん
2012/03/03(土) 00:25:55.380 / 0以外 をboolに変換する
だな
0847デフォルトの名無しさん
2012/03/03(土) 00:28:29.43拡張しにくいんだよボケナス
関数で薄くラップしろって新人教育で死ぬほど言われてんだろ?
なんで出来ねーんだ馬鹿新人視ね
0848デフォルトの名無しさん
2012/03/03(土) 00:29:33.940849デフォルトの名無しさん
2012/03/03(土) 00:36:10.83いちいち!= 0って書いてたわ
0850デフォルトの名無しさん
2012/03/03(土) 01:03:37.60operator boolがあるとは限らないだろ。
0851デフォルトの名無しさん
2012/03/03(土) 01:09:28.78関数でラップしたら部分特殊化が面倒なんだから
Traitsイディオムでやれと何度いったら分かるんだ
他のチームに飛ばすぞ
0852デフォルトの名無しさん
2012/03/03(土) 01:17:53.60オーバーロードで解決できるだろカス
0853デフォルトの名無しさん
2012/03/03(土) 01:33:11.14オーバーロードでも部分特殊化はできないだろ
0854デフォルトの名無しさん
2012/03/03(土) 01:35:26.73関数なら部分特殊化する必要がないだろ
0855デフォルトの名無しさん
2012/03/03(土) 01:47:38.19そのテンプレート関数に与えるクラスが複数のテンプレート引数を持つテンプレートクラスで
複数のうちの一部だけを定めた部分特殊化もあれば、
Traitsらしく「整数のように振る舞える型ならば」のような条件を満たした場合だけの特殊化もあるだろうが。
0856デフォルトの名無しさん
2012/03/03(土) 02:02:21.95>そのテンプレート関数に与えるクラスが複数のテンプレート引数を持つテンプレートクラスで
>複数のうちの一部だけを定めた部分特殊化もあれば、
オーバーロードで何の問題もない
>Traitsらしく「整数のように振る舞える型ならば」のような条件を満たした場合だけの特殊化もあるだろうが。
こういうことの話をしてないことは流れからわかるだろ
0857デフォルトの名無しさん
2012/03/03(土) 02:25:42.26言い訳になってないな。
うちでそんな仕事してたら絶対変なところに飛ばされる
0858デフォルトの名無しさん
2012/03/03(土) 04:28:08.760859デフォルトの名無しさん
2012/03/03(土) 07:36:05.39派遣は辛いだろうが頑張れよ(笑)
0860デフォルトの名無しさん
2012/03/03(土) 12:12:44.41だろ、だろ、だろ、カス、カス、カス
さあみんなも
だろ、だろ、だろ、カス、カス、カス
0861デフォルトの名無しさん
2012/03/03(土) 12:17:00.720862デフォルトの名無しさん
2012/03/03(土) 12:17:23.21てめーらみたいな社蓄PGと一緒にスンナ視ね
にんじんケツにぶち込むぞ糞どもが
0863デフォルトの名無しさん
2012/03/03(土) 12:22:32.01> >Traitsらしく「整数のように振る舞える型ならば」のような条件を満たした場合だけの特殊化もあるだろうが。
> こういうことの話をしてないことは流れからわかるだろ
bool変換処理を operator bool にやらせるか、
オーバーロードされた型ごとの関数にやらせるか、
Traits idiom に則って作られたクラスにやらせるか
の問題なのだからそういう話だろ
0864デフォルトの名無しさん
2012/03/03(土) 12:24:10.57農協に産業医面談のサービスあるでしょう?
0865デフォルトの名無しさん
2012/03/03(土) 14:47:17.47return static_cast<bool>(obj);
}
template <class OBJ> void do_something(OBJ & obj) {
obj.do_something();
}
template <class OBJ> void Func(Obj & obj) {
if(is_good(obj)) {
do_something(obj);
}
}
これが基本形で、例外的な処理があるならクライアントに
template <class X> bool is_good(Hoge<X , int> const & obj) {
return obj.IsValid();
}
template <class X> void do_something(Hoge<X , int> & obj) {
obj.DoSomething();
}
みたいなのを毎回多重定義させて利用させるだけだと思うんだけど
部分特殊化とかコンセプトとかの話がどこから出てきたのか理解できない
0866デフォルトの名無しさん
2012/03/03(土) 14:57:13.110867デフォルトの名無しさん
2012/03/03(土) 15:44:45.42どこからコンセプトが出てきた?
0868デフォルトの名無しさん
2012/03/03(土) 16:07:55.87>>855の3行目ってコンセプトのことでしょ?
0869デフォルトの名無しさん
2012/03/03(土) 16:51:15.62traits系の部分スペシャライズをコンセプトと呼ぶの?
俺は呼ばないけど
0870デフォルトの名無しさん
2012/03/03(土) 16:56:30.60traits系の処理はクラスを使わず関数で実現しろってことだろ
0871デフォルトの名無しさん
2012/03/03(土) 17:41:10.630872デフォルトの名無しさん
2012/03/03(土) 17:43:24.680873デフォルトの名無しさん
2012/03/03(土) 17:43:37.00使わない関数はコンパイラの最適化によるかもしれないが、
外部から呼ばれる可能性のある動的な関数(メソッド)なら、
コードにも組み込まれるだろうからコードサイズには影響するだろう
0874デフォルトの名無しさん
2012/03/03(土) 17:54:09.100875デフォルトの名無しさん
2012/03/03(土) 17:55:38.77Publicでない使わないメソッドは消しといた方がいいぞ
コードサイズも増えるが、多すぎるとロードにも時間がかかる
0876デフォルトの名無しさん
2012/03/03(土) 18:04:24.910877デフォルトの名無しさん
2012/03/04(日) 05:49:05.60http://marupeke296.com/OGG_No1_LibraryInstall.html
ここを参考に準備をしようとしているのですが、libogg-1.3.0 にも libvorbis-1.3.2 にも
解説中のdswファイルbェそもそも無く=AVS2008フォルャ_のslnを開いて動かしてみるも
「デバッグ セッショウの実行可能ファイル」とダイアログが出たりして、途方に暮れております;
ogg再生への道筋を説明している良いサイトなどあれば
教えて頂けませんでしょうか?; よろしくおねがいします;
0878デフォルトの名無しさん
2012/03/04(日) 07:00:14.54そこの情報追っていけば再生までこぎつけるはずだし;
0879デフォルトの名無しさん
2012/03/04(日) 08:54:19.020880デフォルトの名無しさん
2012/03/04(日) 11:29:22.69sln 開いてからやることはツールバーでいう、デバッグ -> デバッグの開始 じゃなくて
ビルド -> ソリューションのビルド やで
0881デフォルトの名無しさん
2012/03/04(日) 11:59:33.64irrklangで楽しよう
0882デフォルトの名無しさん
2012/03/04(日) 12:57:19.34この画像をCreateDecoderFromFilenameで読み込もうとするとS_OKが返らないんですがどうしてでしょうか?
極窓で調べたら偽装jpgでもなさそうなのですが。
0883デフォルトの名無しさん
2012/03/04(日) 13:05:36.73お前のコードがおかしいだけ
0884デフォルトの名無しさん
2012/03/04(日) 13:07:11.04ファイルパスが間違ってるとか?
0885デフォルトの名無しさん
2012/03/04(日) 13:09:39.85解らないなら書き込まないでください
スレ民はあなたのくだらないレスを読んでしまい時間を無駄にしたことに怒りを感じています
容量の無駄でサーバー管理者も迷惑してます
0886デフォルトの名無しさん
2012/03/04(日) 13:18:20.46本当ですか?ロダから保存しなおしてもやっぱりエラーになります。ソースは↓です
D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &m_pD2DFactory);
CoCreateInstance(CLSID_WICImagingFactory,NULL,CLSCTX_INPROC_SERVER,IID_PPV_ARGS(&m_pWICFactory));
m_pD2DFactory->CreateHwndRenderTarget(D2D1::RenderTargetProperties(),D2D1::HwndRenderTargetProperties(m_hwnd, size),&m_pRenderTarget);
pIWICFactory->CreateDecoderFromFilename(path,NULL,GENERIC_READ,WICDecodeMetadataCacheOnLoad,&pDecoder);
>>884
パスは合ってます。ペイントで上書き保存などするとちゃんと通ります。HRESULT hr=-2003292317が返ってます
0887デフォルトの名無しさん
2012/03/04(日) 13:21:07.70お前の方が無駄に見える
0888デフォルトの名無しさん
2012/03/04(日) 19:57:38.29自分もごく一部の画像ファイルが開けない現象があって、その時は確か
WICDecodeMetadataCacheOnLoad を WICDecodeMetadataCacheOnDemand に変えたら
うまく逝ったような気がする。うろ覚えだから間違ってたらごめん。
0889デフォルトの名無しさん
2012/03/04(日) 20:09:28.65表示できました!ありがとうございました!
0890デフォルトの名無しさん
2012/03/04(日) 21:49:36.09通信相手がオープンして待ち構えてるかどうかを
知る方法ってある?
0891877
2012/03/05(月) 00:07:46.41libは登録しかした事がなく色々混乱しましたが、なんとか全部準備できました。
ご助言ありがとうございます。
>>881
色々なものがあるんですね。情報ありがとうございました。
0892デフォルトの名無しさん
2012/03/05(月) 02:00:57.60爆破エフェクトというか30枚程度の画像を連続で表示させる為に、
string型の変数へファイル名を入れた後表示させようとすると、string型から
TCHAR型へ変換する関数が無いから出来ないというエラーが出てしまいます。
ループ内で「ファイル名+○個目の数+ファイル形式」という文字連結をさせたい為に
どうしてもstring型に一度入れなきゃいけない為、これに変わる案か方法何かありませんでしょうか?
0893デフォルトの名無しさん
2012/03/05(月) 02:11:10.31std::stringのことか
それなら std::string str;
str.c_str();で char*が取れる TCHARに型が一致するかどうかは設定しだい
>「ファイル名+○個目の数+ファイル形式」
これぐらいならsprintf使えば
0894デフォルトの名無しさん
2012/03/05(月) 02:18:39.76windowsならwsprintfを使うね
std::wstringでもいいけど
0895デフォルトの名無しさん
2012/03/05(月) 02:22:02.11c_str()で取れるのはconst char *だな。
0896デフォルトの名無しさん
2012/03/05(月) 02:31:10.070897デフォルトの名無しさん
2012/03/05(月) 02:43:04.78ちょっとなんとかいけそうみたいなのでそのあたり調べてやってみます
0898デフォルトの名無しさん
2012/03/05(月) 12:20:56.35これVC++だとコンパイル通って期待通りの動き(呼び出されたインターフェースの型によって処理を切り替える)したんだけど
ほかのコンパイラでも同等の処理をするように書くことはできるかな?
0899デフォルトの名無しさん
2012/03/05(月) 13:41:54.12http://codepad.org/Pfl2PMQc
0900デフォルトの名無しさん
2012/03/05(月) 15:16:59.65アザッス!
0901デフォルトの名無しさん
2012/03/05(月) 21:44:34.58ステップオーバーでちまちま実行していくと問題なく終了するのに、
デバッグなしで開始したりあるいは一気に(ブレークポイントを作らずに)デバッグすると
例外(vector iterator not decrementable)を吐いて終了します
どういうことでしょうか
ちまちま実行していくと期待通りの動きをしているのでどうしようもない・・・
0902デフォルトの名無しさん
2012/03/05(月) 23:14:23.94どこぞのwebページの解説でもある程度は理解出来るのでしょうか
0903デフォルトの名無しさん
2012/03/05(月) 23:15:58.200904デフォルトの名無しさん
2012/03/05(月) 23:18:29.61エラーメッセージが正しいならすなおにvectorのイテレータか添え字がおかしいだろ
begin()から--しようとしてるか[]で負数を指定してるとか
0905デフォルトの名無しさん
2012/03/06(火) 06:59:19.67http://wisdom.sakura.ne.jp/programming/cpp/
http://www.geocities.jp/ky_webid/cpp/language/index.html
この辺みればだいたい把握できると思う
基礎の先へ進むならこのスレに常駐するとか Effective C++ 読むとか
0906デフォルトの名無しさん
2012/03/06(火) 09:45:16.46もしかして複数のスレッドで同一対象を操作してる?
0907デフォルトの名無しさん
2012/03/06(火) 19:43:57.450908デフォルトの名無しさん
2012/03/06(火) 19:47:27.78インテルのキューつかえ
0910デフォルトの名無しさん
2012/03/06(火) 20:05:24.680911デフォルトの名無しさん
2012/03/06(火) 20:06:45.75インテル スレッディング・ビルディング・ブロック(IntelR Threading Building Blocks,TBB)は、インテルが公開しているC++テンプレートライブラリである。
マルチCPU・マルチコアCPUなどを搭載したコンピュータ上でアプリケーションを効率よく動作させることができる。
製品版とオープンソース版があり、オープンソース版は無償でダウンロードが可能である。
様々なプラットフォーム上で動作する。(クロスプラットフォーム)
Intel Threading Building Blocks - Wikipedia
0912デフォルトの名無しさん
2012/03/06(火) 20:09:02.78主なクラス
コンテナクラス
concurrent_hash_map STLのmapクラスをスレッドセーフにしたもの
concurrent_queue STLのqueueクラスをスレッドセーフにしたもの
concurrent_vector STLのvectorクラスをスレッドセーフにしたもの
並列処理アルゴリズム
parallel_forクラス ループ間で依存性がない単純なループの並列処理
parallel_reduceクラス 指定した範囲をより小さな範囲に再帰的に分割し並列処理
parallel_scanクラス 並列プリフィックスを計算
parallel_whileクラス 不明領域、動的領域変更を伴う独立したループ操作
parallel_sortクラス 並列処理でソートを行う
pipelineクラス パイプライン処理
Intel Threading Building Blocks - Wikipedia
0914デフォルトの名無しさん
2012/03/06(火) 20:17:57.10STLのキューにマルチスレッドでアクセスは可能だが、頻繁にアクセスが来ると間違えるか異常終了する。
簡単で安定してるのはインテルのやつ。いくつか試してこれになった。
0915デフォルトの名無しさん
2012/03/06(火) 20:20:14.34クラスAがクラスBのインスタンスをメンバ変数として持つとき、
クラスBのメンバ関数でクラスAのメンバ変数を操作することは可能ですか?
0916デフォルトの名無しさん
2012/03/06(火) 20:22:20.970917デフォルトの名無しさん
2012/03/06(火) 20:33:37.86this渡してやればいい
0918デフォルトの名無しさん
2012/03/06(火) 20:53:12.67Bのメンバ関数を呼ぶときにAのメンバ変数を操作するオブジェクトを渡せばよい
0919デフォルトの名無しさん
2012/03/06(火) 21:17:11.360920デフォルトの名無しさん
2012/03/06(火) 21:48:13.83普通にアクセス制限が適用される。Aのpublicなメンバ変数かAの中でBをfriend宣言してるなら操作可能。
0921915
2012/03/06(火) 21:51:35.11可能なのですね、ありがとうございました。
0922901
2012/03/06(火) 23:25:43.021箇所だけある
it--;
の直前の行では、毎回
it = vec.erase(it);
を実行しており、実行の仕方(一気にやるかちまちまやるか)で挙動が変わる理由が謎です
>>906
2つのスレッドから同じ変数に対してイテレータを回していました
読み込むだけなら問題ないかと思っていましたが、そういうわけにはいきませんか
実は結局この処理が必要で無いことがわかり大幅に変更したのですが、
バージョン管理をちゃんとやっていなかったせいで再現できなくなってしまいました・・・
0923デフォルトの名無しさん
2012/03/06(火) 23:30:35.63erase は?
0924デフォルトの名無しさん
2012/03/06(火) 23:30:44.38なんて恐ろしいことをしてるんだ…
0925922
2012/03/06(火) 23:44:43.63>>923
eraseの処理をするときは単一のスレッドしか動いていません
それとは別の場所で(つまり自分でit--と書いたところとは別の所で)同時にアクセスする時があります
どっちにしろまずかったですかね・・・
0926デフォルトの名無しさん
2012/03/06(火) 23:46:43.960927デフォルトの名無しさん
2012/03/06(火) 23:48:22.29成績管理のプログラムを組んでるのですが、うまくtxtファイルに出力できません。
どうすればいいか教えてください。
0928デフォルトの名無しさん
2012/03/07(水) 00:08:50.53これはポインタの配列だから
scanf("%s", &_data.sub[i]);
こんなことしたら存在しないポインタに書き込みにいって死ぬ
char sub[20][20];
たぶんこうしたかったんだろうけど
0929デフォルトの名無しさん
2012/03/07(水) 00:21:20.41< fprintf(sco_txt, "%16s|%3d¥n", *all_data.sub[i], all_data.score[i]);
---
> fprintf(sco_txt, "%16s|%3d¥n", all_data.sub[i], all_data.score[i]);
0930デフォルトの名無しさん
2012/03/07(水) 01:51:39.04ありがとうございます。できました。
http://codepad.org/zQJeAJo2
続けての質問で申し訳ないのですが、exam_name()のところで選択された名前の要素をmain()に返したいのですが、どうすればいいのかわかりません。
配列は返り値として使えないんですよね?
0931デフォルトの名無しさん
2012/03/07(水) 02:24:01.83int a, i;
char e_name[][21] = {
"1.前期中間試験",
"2.前期期末試験",
"3.後期中間試験",
"4.後期期末試験",
"5.実力試験"
};
for(i = 0; i < 5; i++)
printf("%s\n", e_name[i]);
printf("\n試験名を選択してください:"); scanf("%d", &a);
strcpy(examName, e_name[a-1]);
}
char e_name[21];
exam_name(e_name);
0932デフォルトの名無しさん
2012/03/07(水) 02:51:10.04ありがとうございます。
これはexamNameとe_nameのアドレスが同じだからstrcpy()でその位置の内容を書き換えたっていう解釈でいいですか?
0933デフォルトの名無しさん
2012/03/07(水) 07:23:15.430934デフォルトの名無しさん
2012/03/07(水) 14:05:46.72わかりました。
ありがとうございました。
0935デフォルトの名無しさん
2012/03/07(水) 16:08:32.86内容を保持したまま追加で出力する方法はありますか?
0936デフォルトの名無しさん
2012/03/07(水) 16:15:04.930937デフォルトの名無しさん
2012/03/07(水) 16:24:30.17よろしければ教えてください。お願いします。
0938デフォルトの名無しさん
2012/03/07(水) 16:27:38.55一気に上書きすると良いですよ
0939デフォルトの名無しさん
2012/03/07(水) 16:38:32.90つまりfscanfなどでtxtファイルの内容を読み込んで新しいデータと一緒に出力するということですか?
0940デフォルトの名無しさん
2012/03/07(水) 16:59:12.090941デフォルトの名無しさん
2012/03/07(水) 17:27:12.01manかMSDN
http://lmgtfy.com/?q=fopen
0942デフォルトの名無しさん
2012/03/07(水) 18:09:43.42FILE *fp = fopen("foo.txt", "a");
この辺とか読むと良いかも
ttp://www.orchid.co.jp/computer/cschool/CREF/fopen.html
0943デフォルトの名無しさん
2012/03/08(木) 00:25:07.83了解です。ありがとうございました。
>>942
あ、なるほど...
完全に忘れてました;;
ありがとうございます。
0944デフォルトの名無しさん
2012/03/08(木) 00:49:14.130945デフォルトの名無しさん
2012/03/08(木) 00:51:54.890946デフォルトの名無しさん
2012/03/08(木) 00:52:04.60排他しなくても安全に並列処理できちゃう的な
だれか中学生にもわかるように解説してほしいな
0947デフォルトの名無しさん
2012/03/08(木) 00:53:34.85スレッドセーフなキューさえ存在すればロック不要で処理できる。
0948デフォルトの名無しさん
2012/03/08(木) 00:54:39.870949デフォルトの名無しさん
2012/03/08(木) 00:56:12.82Intel Threading Building Blocks - Wikipedia
インテル スレッディング・ビルディング・ブロック(IntelR Threading Building Blocks,TBB)は、インテルが公開しているC++テンプレートライブラリである。
マルチCPU・マルチコアCPUなどを搭載したコンピュータ上でアプリケーションを効率よく動作させることができる。
製品版とオープンソース版があり、オープンソース版は無償でダウンロードが可能である。
様々なプラットフォーム上で動作する。(クロスプラットフォーム)
主なクラス
コンテナクラス
concurrent_hash_map STLのmapクラスをスレッドセーフにしたもの
concurrent_queue STLのqueueクラスをスレッドセーフにしたもの
concurrent_vector STLのvectorクラスをスレッドセーフにしたもの
並列処理アルゴリズム
parallel_forクラス ループ間で依存性がない単純なループの並列処理
parallel_reduceクラス 指定した範囲をより小さな範囲に再帰的に分割し並列処理
parallel_scanクラス 並列プリフィックスを計算
parallel_whileクラス 不明領域、動的領域変更を伴う独立したループ操作
parallel_sortクラス 並列処理でソートを行う
pipelineクラス パイプライン処理
0950デフォルトの名無しさん
2012/03/08(木) 00:58:15.840952デフォルトの名無しさん
2012/03/08(木) 01:12:54.30テキストモード使わない方法を考えましょう
0953デフォルトの名無しさん
2012/03/08(木) 01:15:33.34前のレジ、後ろのレジがあるとき、一列に並ぶのと同じ。
空いたレジが処理する。
それがロックフリー、ウェイトフリーだ。
「\r \n と連続していたら、\n だけにする」ということだそうだけれども、手元の cygwin/fgets() は \r を削ってくれない。
インストールでミスったのかなあ?
というか、標準入力はどっちで fopen() されているの?やっぱりバイナリ?
0955デフォルトの名無しさん
2012/03/08(木) 01:38:00.71だとすると、バイナリーでfopenされてる可能性が高い
そっか。そもそもテキストモードなんぞなさそうだ。
0957デフォルトの名無しさん
2012/03/08(木) 09:53:30.27こんな警告が表示されるのですがこれは放置しても良い警告なのでしょうか?
無くすにはどうすれば良いのでしょうか?
1>libogg_static.lib(framing.obj) : MSIL .netmodule または /GL を伴ってコンパイルされたモジュールが見つかりました。/LTCG を使用して再開始してください。リンカのパフォーマンスを向上させるためには、コマンドラインに /LTCG を追加してください。
1>LINK : warning LNK4075: /INCREMENTAL は /LTCG の指定によって無視されます。
1>LINK : warning LNK4098: defaultlib 'MSVCRT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
0958デフォルトの名無しさん
2012/03/08(木) 16:15:44.70半島から詳しい解説トンスル
0959デフォルトの名無しさん
2012/03/09(金) 14:59:35.60fopen時のtext、binaryの違いってないよって感じになるんでしょ
macだと改行コードがcrみたい、その場合にはどう処理するんだろうね?
テキストベースの管理の仕方だからね、改行コードの扱いは
0960デフォルトの名無しさん
2012/03/09(金) 15:11:14.750961デフォルトの名無しさん
2012/03/09(金) 15:19:35.060962デフォルトの名無しさん
2012/03/09(金) 22:16:11.250963デフォルトの名無しさん
2012/03/09(金) 22:57:46.48#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main(){
int ans,inp,count=1;
srand((unsigned)time(NULL));
ans=rand() %1000+1;
printf("1〜1000までの数から正解を予想してください。\n");
do{
printf("あと%d回で正解を予想してください。↓\n",11-count);
scanf("%d",&inp);
if(ans==inp)
{printf("%d回目で正解です",count);break;}
else
{if(inp<ans){printf("もっと大きな数です。\n");
count=count+1;}
else{printf("もっと小さな数です。\n");
count=count+1;}}
}while(count<=10);
if(count==11){
printf("ゲームオーバー。正解は%dでした。\n",ans);}
}
このゲームが面白くなっちゃって二日くらいこれで遊んでる 早くもつまずいた
0964デフォルトの名無しさん
2012/03/09(金) 23:04:45.03あるある。
おれも小学生のころそんな感じで
数字当てゲームを延々とやってたわ。
0965デフォルトの名無しさん
2012/03/09(金) 23:09:35.39役割を逆にしたのを作ろうぜ
ユーザーが出題してPCが当てる
0966デフォルトの名無しさん
2012/03/09(金) 23:16:43.27ユーザが試した数字から離れるように変えていく奴。
0967デフォルトの名無しさん
2012/03/09(金) 23:20:08.320968デフォルトの名無しさん
2012/03/09(金) 23:21:03.13>SSE (ストリーミング SIMD 拡張命令) レジスタの 16 バイトの読み取りと書き込み、
>および文字列操作は、アトミックな操作ではない可能性があります。
手持ちのCPUでMOVDQAのアトミック性が確保されているか確認する方法はあるの?
0969デフォルトの名無しさん
2012/03/10(土) 19:17:15.23何をするのか知らないが、どうしてもアトミック性が欲しい場合は
アトミック命令を使うか明示的にロックしろ。
0970デフォルトの名無しさん
2012/03/10(土) 19:44:38.580971デフォルトの名無しさん
2012/03/12(月) 11:14:11.660972デフォルトの名無しさん
2012/03/12(月) 12:56:26.60もし目的がゲーム作りたいだけならUnityおすすめ
0973デフォルトの名無しさん
2012/03/12(月) 17:18:35.90背景が白だと文字が眩しくて見えません;
0974デフォルトの名無しさん
2012/03/12(月) 17:25:08.63できますよ
0975デフォルトの名無しさん
2012/03/12(月) 17:41:45.92つーか、言語自体に背景色なんて概念はないので、大人しくお使いのアプリのマニュアルでも読みなさい。
0976デフォルトの名無しさん
2012/03/12(月) 17:42:32.730977デフォルトの名無しさん
2012/03/12(月) 17:45:52.40背景色はC++(プログラム言語)じゃなくてテキストエディタが担当してるよ
何使ってプログラミングしてる?
0978デフォルトの名無しさん
2012/03/12(月) 18:40:44.95俺大成するかもな
0979デフォルトの名無しさん
2012/03/12(月) 19:04:08.530980デフォルトの名無しさん
2012/03/12(月) 19:08:57.74それができないと厳しいですね
0981デフォルトの名無しさん
2012/03/12(月) 21:56:34.460982デフォルトの名無しさん
2012/03/13(火) 19:06:04.620983デフォルトの名無しさん
2012/03/13(火) 20:51:04.18IQは170ありません。
0984デフォルトの名無しさん
2012/03/13(火) 21:24:50.15なれます。http://toro.2ch.net/test/read.cgi/tech/1328276597/ が修練の場として適切かと思います。
0986デフォルトの名無しさん
2012/03/14(水) 04:10:52.990987デフォルトの名無しさん
2012/03/14(水) 19:03:09.660988デフォルトの名無しさん
2012/03/15(木) 04:15:21.790989デフォルトの名無しさん
2012/03/15(木) 20:27:16.500990デフォルトの名無しさん
2012/03/16(金) 04:18:12.600991デフォルトの名無しさん
2012/03/16(金) 09:30:53.480992デフォルトの名無しさん
2012/03/16(金) 19:44:50.53http://toro.2ch.net/test/read.cgi/tech/1331894668/
0993デフォルトの名無しさん
2012/03/16(金) 21:24:17.67おつうめ
0994デフォルトの名無しさん
2012/03/17(土) 11:02:28.250995デフォルトの名無しさん
2012/03/17(土) 21:05:55.090996デフォルトの名無しさん
2012/03/18(日) 07:54:27.490997デフォルトの名無しさん
2012/03/18(日) 08:10:14.77生理って書くな
:
0998デフォルトの名無しさん
2012/03/18(日) 11:42:16.49http://toro.2ch.net/test/read.cgi/tech/1331894668/
0999デフォルトの名無しさん
2012/03/18(日) 11:46:15.14【初心者歓迎】C/C++室 Ver.78【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1331894668/
1000デフォルトの名無しさん
2012/03/18(日) 11:48:18.16\ヽ, ,、
`''|/ノ
.|
_ |
\`ヽ、|
\, V
`L,,_
|ヽ、)
.|
/ ,、
/ ヽYノ
.| r''ヽ、.|
| `ー-ヽ|ヮ
| `|
ヽ, ,r .|
ヽ,r'''ヽ!'-‐'''''ヽ、ノ
,,,..---r'",r, , 、`ヽ、 ヾ
ヽ、__/ ./ハレハ i`ヽ、 `''r`ミ_
.レ//r,,,、 レ'レハヾ, L,,_ `ヽ、
"レ, l;;;l l;;;l`i.リレ' リ ̄~~
ヽ、 ワ `"/-'`'`'
`''''''''"
┼ヽ -|r‐、. レ |
d⌒) ./| _ノ __ノ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。