【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©5ch.io
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2014/11/28(金) 21:54:52.02ID:QcGoPiazただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
前スレ
【初心者歓迎】C/C++室 Ver.93【環境依存OK】
http://peace.2ch.net/test/read.cgi/tech/1412495628/
0002デフォルトの名無しさん
2014/11/28(金) 21:55:19.03ID:QcGoPiaz0003デフォルトの名無しさん
2014/11/28(金) 23:10:20.05ID:/kbuZX050004デフォルトの名無しさん
2014/11/29(土) 03:30:55.83ID:SoXvwZNw,,イ`" 、-' `;_' ' ..::::::::::::::...
,-、 _.._ ( (,(~ヽ'~ ..:::::::::::::::::::::::
)'~ レー' 〉 ヽ i`'} .:::::::::::::::::::::::
~つ '-ー、 i | i' ...:::::::::::::::::::::::
/ < / 。/ ! ......::::::::::::::::::::::::: これは>>1乙じゃなくて
/ ~^´ /},-'' ,●::::::::::::::::::::::::::::::::::::
i、 ,i' _,,...,-‐-、/ i :::::::: .:::::::::::::
..ゝ <,,-==、 ,,-,/ .::::::::::: 放射能がうんたら
) {~''~>`v-''`ー゙`'~ ..::::::::: ........::.
{ レ_ノ ..::::::::. ......:::::::::
ノ '' ..::::::: ...::.:...:::::::::
.::::::::: ...:......:::::::::::: .
.:::::::::::. ..... .. ..:::::::::::::::::::::::: :::.
::::::::::::::::.::::::....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.. :: ::..
.:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::: ::.
::::::::::::::::: :::::::::::::::::::::::::::::: :::::
.:: ::. :::
0005デフォルトの名無しさん
2014/11/30(日) 06:07:00.87ID:KU6YIKgXwindodws7 32bit
0006デフォルトの名無しさん
2014/11/30(日) 06:08:23.21ID:b4nmdqGs0007デフォルトの名無しさん
2014/11/30(日) 15:37:07.41ID:2hiiWexa0008デフォルトの名無しさん
2014/11/30(日) 20:06:36.53ID:HpzzSpTs0009デフォルトの名無しさん
2014/11/30(日) 23:20:16.87ID:dPZ+5hvT0010デフォルトの名無しさん
2014/12/01(月) 04:11:40.74ID:tnBdCQuYその結果をvectorに入れて返したいので、データを入れる構造体を定義して、
struct MyData{
...
};
vector<MyData> func1()
{
vector<MyData> vmd;
...
return vmd;
}
みたいな感じの関数を良く使います。
この時に、さらにその関数の実行が上手く行ったかどうかも返したいので、即席でヘンテコな構造体を作って、
struct ReturnData{
vector<MyData> vmd;
bool success;
};
ReturnData func2(){
ReturnData rd;
...
rd.vmd.push_back(..);
...
rd.success = true;
return rd;
}
みたいな事を良くやります。
自分でも安易なやり方だと思うのですが、もう少しスマートな定番方式はありますか?
関数の引数で値を返すと言う方法もありますが、私としてはどちらかというと引数ではなく
戻り値で返したいのです。上級者の皆さんのアドバイスをお願いします。
0011デフォルトの名無しさん
2014/12/01(月) 04:19:00.43ID:Z5eoidtc0012デフォルトの名無しさん
2014/12/01(月) 04:28:01.58ID:tnBdCQuY標準のC++の機能では無理でしょうか?
0013デフォルトの名無しさん
2014/12/01(月) 04:29:53.67ID:Z5eoidtcじゃあstd::pairで
0014デフォルトの名無しさん
2014/12/01(月) 04:32:52.23ID:GzfBkz+h0015デフォルトの名無しさん
2014/12/01(月) 04:32:52.00ID:6glZ0bPp0016デフォルトの名無しさん
2014/12/01(月) 04:33:07.12ID:tnBdCQuYレスありがとうございました。
早速ググりました。こんなのが有るとは知らなかったです。
でもメンバ変数名がfirst、secondに固定されるようなのですが、
ちょっと抵抗有ります。
0017デフォルトの名無しさん
2014/12/01(月) 04:34:28.93ID:Z5eoidtcじゃあstd::tuple
0018デフォルトの名無しさん
2014/12/01(月) 04:37:22.78ID:Z5eoidtc0019デフォルトの名無しさん
2014/12/01(月) 04:40:51.16ID:tnBdCQuYたびたびレスありがとうございます。
さっそくググりました。こんなのが有るのは知らなかったです。
std::tuple<vector<MyData>, bool> func(){
...
}
ってやればいいんですね。でも、これだと、即席のヘンテコ構造体でやるのと同じような感じです。
>>14
>unique_ptrでもいいな
どうやるんでしょうか?
使っているのはVisual studio 2013です。
0020デフォルトの名無しさん
2014/12/01(月) 04:45:42.80ID:GzfBkz+hstd::unique_ptr<MyData> func() {
auto pvmd = std::make_unique<MyData>();
pvmd->push_back(..);
if (...)
return pvmd; // 成功
else
return nullptr; // 失敗
}
0021デフォルトの名無しさん
2014/12/01(月) 14:29:33.50ID:tnBdCQuYレスありがとうございました。
試したら上手く行きました。
unique_ptrというのは使ったことが無いのですが、こういう用途に
使うものなのでしょうか?
もしtrue/false以外の別の情報も返したい場合には、
どんな方法がありますか?
0022デフォルトの名無しさん
2014/12/01(月) 16:16:10.64ID:hOHEB5gl引き数でvectorの参照を渡せばいいよ。
0023デフォルトの名無しさん
2014/12/01(月) 23:46:42.46ID:DT2fS000>>10が完成形
0024デフォルトの名無しさん
2014/12/01(月) 23:59:11.63ID:8Fp5dgvs0025デフォルトの名無しさん
2014/12/02(火) 00:01:10.97ID:shurURxWどこでコピーが起こるというの
0026デフォルトの名無しさん
2014/12/02(火) 00:10:37.34ID:deKVkNPa0027デフォルトの名無しさん
2014/12/02(火) 00:11:56.24ID:/z1AotGw{
vector<T> v;
;
return v;
}
と vector をベッタリかえすのだから、v全体がコピーされる、と考えてしまうのだが
Java だとこれでもいいかもしれないが
>>10 が完成形とかなんの冗談だ?
0028デフォルトの名無しさん
2014/12/02(火) 00:19:27.50ID:PXdmhxP80029デフォルトの名無しさん
2014/12/02(火) 00:26:53.17ID:JIq5qYWA勉強になった
0030デフォルトの名無しさん
2014/12/02(火) 01:56:11.60ID:SAWFqoM+0031デフォルトの名無しさん
2014/12/02(火) 13:01:34.36ID:4lPIVtOy0032デフォルトの名無しさん
2014/12/03(水) 00:45:22.91ID:gaGGe+Cvstd::shared_ptr<T> a(ptr);
void *UserData = &a;
...
std::shared_ptr<T> b = *(std::shared_ptr<Type> *)UserData;
で大丈夫なの?
0033デフォルトの名無しさん
2014/12/03(水) 03:29:04.25ID:DGNVFO0Q0034デフォルトの名無しさん
2014/12/03(水) 18:17:41.63ID:WxiYAD3tクラスの生成を関数の返り値に制限したい
これって両立不可?
0035片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/12/03(水) 18:19:43.77ID:ZVIn2no00036デフォルトの名無しさん
2014/12/03(水) 18:25:14.76ID:ZoY3w5R8生成はファクトリーパターンで
0037デフォルトの名無しさん
2014/12/03(水) 18:42:13.82ID:WxiYAD3tどうするんでしたっけ・・・
0038デフォルトの名無しさん
2014/12/03(水) 18:42:54.40ID:o987ZOaf出来るのは宣言と定義。
0039デフォルトの名無しさん
2014/12/03(水) 19:00:43.60ID:6lRqEEU9A()もprivate
0040デフォルトの名無しさん
2014/12/03(水) 19:06:41.38ID:WxiYAD3tダメみたいですが・・・?
0041デフォルトの名無しさん
2014/12/03(水) 19:15:09.69ID:GXUScfW3いけたで
0042デフォルトの名無しさん
2014/12/03(水) 19:18:51.17ID:EEGJ9Grg後者の方が早いんでしょうか。
0043デフォルトの名無しさん
2014/12/03(水) 19:19:50.19ID:ZoY3w5R80044デフォルトの名無しさん
2014/12/03(水) 19:35:04.81ID:WxiYAD3tやっぱコピーコンストラクタを開放するしかないっすかね
0045デフォルトの名無しさん
2014/12/03(水) 19:47:07.20ID:6lRqEEU90046デフォルトの名無しさん
2014/12/03(水) 19:47:35.07ID:GXUScfW3コピーコンストラクタはprivateだけど
0047デフォルトの名無しさん
2014/12/03(水) 19:49:41.30ID:+PNtgzjY// き・ん・し.
Bar &operator=( Bar const& );
Bar( Bar const& );
Bar(){}
public:
int a;
static Bar &generate(){ return *new Bar; }
static void erase( Bar &bar ){ delete &bar; }
};
int main()
{
// 受け取るのはこれで.
Bar &a = Bar::generate();
// Bar b; // これエラー.
// Bar *c = new Bar; // これももちろんエラー.
Bar::erase( a );
}
0048デフォルトの名無しさん
2014/12/03(水) 19:53:27.23ID:+PNtgzjYclass Bar_ {
// 中は同じ.
};
typedef Bar_ &Bar;
でBar_::generate();とか。
どっちかっていうとFactoryクラスをfriendにしてgenerateとeraseをそっちに移す方が好み
Bar b = Factory::generate();
って書けるし
0049デフォルトの名無しさん
2014/12/03(水) 20:39:25.03ID:cd9cih+w今度C++を書かなきゃいけないのだけど、なにかいい書籍はありますか?
プログラミングの基礎的な部分とかC言語とかぶる部分は飛ばしたいのだけど
0050デフォルトの名無しさん
2014/12/03(水) 20:39:57.95ID:cd9cih+w0051デフォルトの名無しさん
2014/12/03(水) 20:40:13.20ID:Kz7mO3Xi0052デフォルトの名無しさん
2014/12/03(水) 21:01:26.40ID:+PNtgzjY0053デフォルトの名無しさん
2014/12/03(水) 21:17:48.37ID:U2a4HdIu0054デフォルトの名無しさん
2014/12/03(水) 22:36:34.22ID:GGHHEieiclass Uncopyable
{
public:
Uncopyable(const Uncopyable&) = delete;
Uncopyable& operator= (const Uncopyable&) = delete;
Uncopyable(Uncopyable&&) = delete;
Uncopyable& operator= (Uncopyable&&) = delete;
};
0055デフォルトの名無しさん
2014/12/03(水) 22:38:33.87ID:xJtNBUDmとんちんかんなURLを貼りまくる馬鹿ってよくいるよな
0056デフォルトの名無しさん
2014/12/03(水) 22:55:51.28ID:WRoQBeep0057デフォルトの名無しさん
2014/12/03(水) 23:15:20.30ID:cd9cih+wC++11だとかC++14?だとかは最初はあんまり気にしなくて良いんですかね。
C++はテンプレートとかboostとか難しそうというか覚えることが多そうで怯みますね
0058デフォルトの名無しさん
2014/12/03(水) 23:56:59.39ID:PeV925EiC++は手続き型であり、構造化であり、オブジェクト指向であり、ジェネリクスであり、半関数型である。
どんな人の好みにでも合致する部分があり、嫌悪する部分がある。
故に、自分の好みの部分を最大限に生かすように使えばいいのだ。決してすべてを網羅する必要などない。
boostはあくまで外部ライブラリだから!言語として考えるものじゃないから!
0059デフォルトの名無しさん
2014/12/04(木) 07:43:08.18ID:4D2VbvpKどこかの誰かの意味不明な好みを押し付けられる!
0060デフォルトの名無しさん
2014/12/04(木) 07:48:13.59ID:UwyMS5sVhttp://takedanet.com/archives/1014633741.html
https://www.youtube.com/watch?v=xBTfDX--vVs
0061デフォルトの名無しさん
2014/12/04(木) 09:19:18.83ID:ILmf5FI6if (a != NULL)
↑
フォームのポインタ
とかで問題ないですかね。
0062デフォルトの名無しさん
2014/12/04(木) 09:25:11.45ID:hVhP7pu10063デフォルトの名無しさん
2014/12/04(木) 11:14:14.78ID:NIw8k+Ja・ヌルでないポインタが有効なメモリ(オブジェクト)を指しているかどうか
・オブジェクトが有効なウインドウハンドルを持っているかどうか
気の利いたライブラリを使っているなら上のいくつかを省略できる
0064デフォルトの名無しさん
2014/12/04(木) 12:45:55.86ID:bgy3WeAZま でもポインタなら何が入るかは保証できしんしね。
0065デフォルトの名無しさん
2014/12/04(木) 14:26:22.61ID:aeP/K1170066デフォルトの名無しさん
2014/12/04(木) 14:29:32.81ID:08jQOl/90067デフォルトの名無しさん
2014/12/04(木) 14:34:51.86ID:aeP/K1170068デフォルトの名無しさん
2014/12/04(木) 17:36:19.43ID:Q5URs8EI0069デフォルトの名無しさん
2014/12/06(土) 18:44:37.04ID:T3VPTifq何種類かの例外クラスを投げうる関数を使うのに、tryブロックで囲みcatchしたあとの処理を共通化したいのですがどのように書けばいいですか?
今まではcatchをダラダラといくつか書いてたのですが、 catchしうる例外の種類が増えた時その関数を使う箇所全てのcatchを増やさないといけないことに気が付きました。
投げられる例外は必ずstd::exceptionを継承した例外クラスなので、とりあえずはstd::exceptionの参照でキャッチして、
受け取りうるエラークラスの型のオブジェクトを引数に取るようなポリモーフィックな関数で処理しようとしたのですがうまくいきません。
例外処理を共通化するにはどう実装すればよいですか?
0070デフォルトの名無しさん
2014/12/06(土) 18:55:39.89ID:pl1CQQsq0071デフォルトの名無しさん
2014/12/06(土) 18:57:18.46ID:7IWME+c9その関数から出す例外の共通ベースクラスを作って
例外は全部そのベースクラスの派生クラスだけ投げる
そのベースクラスだけcatchする
0072片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/12/06(土) 19:01:26.94ID:Z6yqpce/...
}catch(const std::exception& e)
{
catcher(e);
}
0073デフォルトの名無しさん
2014/12/06(土) 19:01:49.08ID:T3VPTifqなるほど、確かに
解決しました、有難うございました
0074デフォルトの名無しさん
2014/12/06(土) 19:03:38.43ID:T3VPTifqこれでcatcherを派生クラスごとに書いたんですがうまくいかないということでしたが、
一回try catchする関数でラップすることで解決しました
0075デフォルトの名無しさん
2014/12/06(土) 20:04:28.52ID:47cvncTJ必要な変数を渡すのが面倒なんだよな。
C#6.0みたいに条件指定できるようにならないものか
catch (exeption &e) if (e.SomeValue ==2 || e.OtherValue!= null) {
}
0076デフォルトの名無しさん
2014/12/07(日) 09:51:35.94ID:RIZYWRwW>>75
そんなのいちいち構文拡張しなくてもリスローすればいいやん
0077デフォルトの名無しさん
2014/12/07(日) 13:55:50.82ID:YhbOfaXo再スローしたら後続のキャッチハンドラにいかなくね?
0078デフォルトの名無しさん
2014/12/08(月) 08:34:31.21ID:qdtwuYGK再帰で書くようなコンパイラを書くか、窓でメインとスレッドエントリーポイントで囲んで謝罪メッセージを出力するぐらいしか使わないんだが。
例外を掴んでリカバリコードを与えた上でリトライ、スキップが書けないから使いどころが少ない
0079デフォルトの名無しさん
2014/12/08(月) 08:50:19.47ID:RosCv9n9正常系にエラー処理をずらずら書きたくないからな
0080デフォルトの名無しさん
2014/12/08(月) 12:43:31.77ID:4KHGvKuG0081デフォルトの名無しさん
2014/12/08(月) 13:58:04.25ID:X7nA68GZまあ、panicとrecoverで例外相当の事が出来ちゃうんだけどね
0082デフォルトの名無しさん
2014/12/08(月) 14:26:40.68ID:QWYJ80kV仕方ないから前橋さんのにしたよ
14年前の本か・・・
0083デフォルトの名無しさん
2014/12/08(月) 21:15:58.85ID:PwuM5X3u0084デフォルトの名無しさん
2014/12/09(火) 08:35:32.85ID:FiVhwApyFILE *fp;
wstring logFile = "ログファイル.txt"
errno_t err = _wfopen_s(&fp, logFile.c_str(), L"at, ccs=UTF-8");
みたいな感じでファイルオープンして、vfwprintf_s()を使って日本語を書き出しているのですが、
文字が時々化けるのです。
ログファイルなので、プログラムの実行中にいろんな情報を書き出しています。ファイルが既に有る場合には追加で書き込んでいます。
デバッグなどでプログラム実行中に強制的に中止することもあります。なので、ログファイルに書き出している途中で中断した
場合などに、ファイルが中途半端な状態で閉じられ、そういう不完全なファイルに、次の実行時に追加で書き出すと、
化けるのかななどと推測していますが、根拠はありません。
プログラム開始前にファイルを削除して新規に作成すれば化けることはないのですが、それだと長期的なログが収集出来ません。
ログファイルが文字化けする理由は何でしょうか?どのような対策が良いでしょうか?
0085デフォルトの名無しさん
2014/12/09(火) 08:58:18.86ID:BAVYOY2g0086デフォルトの名無しさん
2014/12/09(火) 12:41:05.09ID:wZ/MoV2Cだが多分排他してないからじゃね
008784
2014/12/09(火) 19:56:43.15ID:FiVhwApyしばらく修行してまた出直します。ありがとうございました。
0088デフォルトの名無しさん
2014/12/09(火) 21:39:04.28ID:C9WRahhUある程度溜まったところで実際のファイルに書き出される仕組み
0089デフォルトの名無しさん
2014/12/09(火) 22:57:08.38ID:1v5rgyWLutf-8は、まだ普及途中の文字符号化方式だから不具合も希にある。
だが、86が指摘している通り、俺も排他制御せずにログファイルに書き込んでいる事が原因だと思うな。
確かめたいならば、一度ccs=UTF-8を外して実行してみることを勧める。
Cの一行、ストリーム関数の中の処理と、スレッドがプリエンプションするタイミングは無関係に発生する。
0090デフォルトの名無しさん
2014/12/10(水) 20:47:20.10ID:xebn7APd・・・
Max = std::max( Max, 0 );
とすると、引数の型が揃わないからエラーになります。
0を0uとしてもダメです。
unsigned char( 0 )にしたら通りますが、
unsigned charな数値リテラルの書き方ってあるんでしょうか?
0091デフォルトの名無しさん
2014/12/10(水) 20:49:06.99ID:Lk9vW6tq0092デフォルトの名無しさん
2014/12/10(水) 20:57:38.98ID:SSG8QMHtCキャストやreinterpret_castは死すべき、慈悲は無い
0093デフォルトの名無しさん
2014/12/10(水) 21:00:47.98ID:OE3nWLD+無いのは慈悲じゃなくて、>>92の脳みそじゃね?
0094デフォルトの名無しさん
2014/12/10(水) 21:19:47.64ID:o0U1RKIw揃わないなら揃えなくてもいいように指定すればいい
std::max<unsigned char>(Max, 0) とか
std::max<std::decay<decltype((Max))>::type>(Max, 0) でOK
0095デフォルトの名無しさん
2014/12/10(水) 21:30:21.38ID:OE3nWLD+>文字化けの原因が自分のプログラムだけにあると思い込まない方がいい。
>utf-8は、まだ普及途中の文字符号化方式だから不具合も希にある
じゃあその不具合の一例を出してみろ
009690
2014/12/10(水) 22:22:48.33ID:xebn7APdありがとうございます。
>>94
おお、そんな書き方ができたとは!
前者にします。
ありがとうございました。
0097デフォルトの名無しさん
2014/12/11(木) 00:21:22.17ID:eHXhGFzQ0098デフォルトの名無しさん
2014/12/11(木) 00:40:13.74ID:IvniPlhW0099デフォルトの名無しさん
2014/12/11(木) 00:42:06.78ID:lUWBGmWZ010090
2014/12/11(木) 00:50:53.63ID:ykbWZu7Kあ、ホントは
Max = std::max( Max, b ? Val : 0 );
みたいな感じです。
>>90は問題を示すために簡略化しました。
0101デフォルトの名無しさん
2014/12/11(木) 01:21:52.53ID:f/Eu3uQUVC++だったらこれ使ったら?
std::max( Max, 0ui8 );
010290
2014/12/11(木) 01:26:59.08ID:ykbWZu7Kえ!?そんな書き方できるんですか!?
ちょっとキモいですけど、文字数少なくてナウいですね。
明日会社で試してみます!
ありがとうございます!
0103デフォルトの名無しさん
2014/12/11(木) 02:28:37.86ID:+X5/HCeV0104デフォルトの名無しさん
2014/12/11(木) 04:42:56.41ID:JvQXLAiaつい最近そのバグ見つけて報告したらパッチ出たよ
0105デフォルトの名無しさん
2014/12/11(木) 08:24:27.06ID:Efs37Jrl0106デフォルトの名無しさん
2014/12/11(木) 08:25:35.47ID:g7NuR/qoHTMLも編集できるタイプは自動認識して、かつ履歴にあるとチェックしない時がある
最初にASCIIやSJISで認識して、そのあと実はUTF-8に更新されると化ける
まあUTF実装の不具合じゃないけど、直面するとバグだー不具合だー実装者無能と騒がれる
0107デフォルトの名無しさん
2014/12/11(木) 08:30:52.22ID:g7NuR/qoもとの質問と違うしね
0108デフォルトの名無しさん
2014/12/11(木) 08:31:27.93ID:Efs37Jrl0109デフォルトの名無しさん
2014/12/11(木) 08:42:55.64ID:RrJEy+mk0110デフォルトの名無しさん
2014/12/11(木) 09:22:23.87ID:pDWjQEFuif(a && !b) と書いても同じですよね?
0111デフォルトの名無しさん
2014/12/11(木) 09:32:51.12ID:vPIcYGSkhttps://ja.wikipedia.org/wiki/%E6%BC%94%E7%AE%97%E5%AD%90%E3%81%AE%E5%84%AA%E5%85%88%E9%A0%86%E4%BD%8D#.E3.83.97.E3.83.AD.E3.82.B0.E3.83.A9.E3.83.9F.E3.83.B3.E3.82.B0.E8.A8.80.E8.AA.9E
0112デフォルトの名無しさん
2014/12/11(木) 09:54:27.64ID:pDWjQEFuありがとうございました。
良く迷うので、あえて
if(a && (!b))
のように書くことにします。
0113デフォルトの名無しさん
2014/12/11(木) 10:30:00.39ID:HAPX7Bnjそれが正解
0114デフォルトの名無しさん
2014/12/11(木) 15:03:37.93ID:lvwk8IPr0115デフォルトの名無しさん
2014/12/11(木) 15:16:39.75ID:+X5/HCeV> まあUTF実装の不具合じゃないけど、
で、結局何が言いたかったの?
0116デフォルトの名無しさん
2014/12/11(木) 15:23:02.60ID:SXmyeFPJ自分の妄想垂れ流したいだけなんじゃないの?
0117デフォルトの名無しさん
2014/12/11(木) 15:54:04.45ID:+X5/HCeV判別の為にBOMを付けざるを得ないってのも解らなくはないけどな。
個人的に今更SJISなんか使わねえから設定でUTF-8をデフォルトにしてくれんかなとは思う。
仕事でWindows使ってないからあんまり困ってないけど
0118デフォルトの名無しさん
2014/12/11(木) 18:19:12.99ID:SiH2jPo3何を根拠に物申してるんだ。
Unicode規格読んだ上で言ってるのか?
0119デフォルトの名無しさん
2014/12/11(木) 18:27:04.39ID:xoNSZmlNちょっとキモいですけど、文字数少なくてナウいですね。
このスレもう嫌だ
0120デフォルトの名無しさん
2014/12/11(木) 18:32:15.94ID:g7NuR/qoそう思うんだったら、そうなんだろうな
と。
0121デフォルトの名無しさん
2014/12/11(木) 20:23:43.57ID:A1vk36Nn「<EF BB BF>と言うシーケンス」という表現になっていて
BOMという用語は避けているようだ。
3.10章D95, 23.8章
0122デフォルトの名無しさん
2014/12/11(木) 20:32:47.37ID:Knr7owVD0123デフォルトの名無しさん
2014/12/11(木) 20:46:37.82ID:3e12kUSR↓
まだ普及途中の文字符号化方式だから不具合も希にある
↓
じゃあその不具合の一例を出してみろ
↓
つい最近そのバグ見つけて報告したらパッチ出たよ
↓
具体的に
↓
(世の中の)エディタが文字化けを起こしやすい。
俺のプログラムに非が無いのにバグと言われた経験ある。
何なのこのアホは
012490
2014/12/11(木) 21:03:27.00ID:ykbWZu7Kその記述でコンパイル通りました。
ui8以外にも色々あるんですね。
勉強になりました。
>>103
あ、たしかに、それでOKですね・・・w
数値リテラルを使わない上に、文字数も最小になったので、
今回はその記述でいくことにしました。
ありがとうございました!
0125デフォルトの名無しさん
2014/12/11(木) 22:58:31.99ID:2YwrX4ci0126デフォルトの名無しさん
2014/12/12(金) 00:18:17.71ID:Znidw3Lcそのコード配列をBOMという別名でエンコード判定にも使っているだけで。
0127デフォルトの名無しさん
2014/12/12(金) 01:32:22.91ID:ByYC3ZHEprivate:
ここ
}
void formA::test(){
・・・
}
の時、privateの所に、
void test() と宣言するのと、
void formA::test(); で宣言するのでは違うんでしょうか。
どっちもコンパイルされて動くんですが
0128デフォルトの名無しさん
2014/12/12(金) 01:48:33.07ID:+hKqCGtl0129デフォルトの名無しさん
2014/12/12(金) 02:02:41.86ID:66O80gtqprivate:
void formA::test();
};
みたいに(クラス内での)メンバ関数の宣言で修飾名を使うのは規格違反
クラス外での定義のときだけ許される
vc++で通るのは独自拡張
0130127
2014/12/12(金) 02:27:24.01ID:FMxaf1vD0131デフォルトの名無しさん
2014/12/12(金) 05:35:04.73ID:iNQHvDR7一時期ファイルの先頭に「美乳」って書いておくと
そのバイト列がBOMの代わりに使えるって話があったな
0132デフォルトの名無しさん
2014/12/12(金) 10:48:12.88ID:IIqhtssGCだとファイルの先頭に書いていたのですが、今日、関数の中でプロトタイプ宣言してみたのですが、
void func1()
{
int func2(); // 別のファイルで実装
int a = func2();
}
これでも問題なく行けたのですが、これは問題ないでしょうか?
0133デフォルトの名無しさん
2014/12/12(金) 10:54:19.16ID:8BqNZxMW0134デフォルトの名無しさん
2014/12/12(金) 11:08:27.34ID:IIqhtssG見つからなかったので、何かの間違いかと思っているのですが。
0135デフォルトの名無しさん
2014/12/12(金) 11:23:01.22ID:66O80gtqついでにC++固有ではなくCから引き継いだ仕様だ
0136デフォルトの名無しさん
2014/12/12(金) 11:24:09.94ID:IIqhtssGサンキュウ、君は詳しいな。助かったよ。ありがとう。
0137デフォルトの名無しさん
2014/12/12(金) 12:01:07.33ID:JIdeGDe7変数宣言と同じだろ
スコープ内か外かの違い
0138デフォルトの名無しさん
2014/12/12(金) 12:11:51.41ID:7CN2W1ZV自分も参考になった。
0139デフォルトの名無しさん
2014/12/12(金) 12:41:54.76ID:xeh3XKfG別ファイルの関数呼ぶのにそんな宣言してるやつ見たらとりあえずディスる
0140デフォルトの名無しさん
2014/12/12(金) 15:08:49.77ID:WKe2cl7P例えば、こんな感じ。
--
int main()
{
double sin();
printf("%g\n", sin(0.0));
return 0;
}
--
今となっては飛んだアナクロ仕様だな。
0141デフォルトの名無しさん
2014/12/12(金) 15:12:12.08ID:z5EZhpJA0142デフォルトの名無しさん
2014/12/12(金) 15:14:52.49ID:7CN2W1ZVそんなロートルが勤めれるなんていい会社じゃないか。
0143デフォルトの名無しさん
2014/12/12(金) 16:05:41.97ID:Htsdk0RS0144デフォルトの名無しさん
2014/12/12(金) 16:13:35.54ID:z5EZhpJA0145デフォルトの名無しさん
2014/12/12(金) 16:21:08.29ID:Htsdk0RSFoo b(1);
Foo c();
0146デフォルトの名無しさん
2014/12/12(金) 18:47:21.80ID:msKuYMsR次のようなクラスがあったとして、
template<typename T>
class A
{
public:
A(T val_) : val(val_) {}
...
private:
T val;
};
このクラスのための+演算子(2項バージョン)を実装したいと思って、
template<typename T>
A<T>& operator+(const A<T>& lhs, const A<T>& rhs)
{
...
return ret;
}
というようなものを作ったんですけど、次のようにするとエラーがでてしまいます
A<int> a(1), a2(2);
A<int> a3 = a1 + a2;
A<int> a4 = a3 + 1; //←ここでエラー
ここでintからA<int>への変換が働いてうまく動くと期待したんですが、ダメでした
こういうコードが動くように+演算子を実装したいんですけどどうすればいいですか?
0147デフォルトの名無しさん
2014/12/12(金) 18:51:03.20ID:rt+9hUOc0148デフォルトの名無しさん
2014/12/12(金) 18:55:51.20ID:iNQHvDR7A<T>& operator+(const A<T>& lhs, const T& rhs)
{
return lhs + A<T>(rhs);
}
0149146
2014/12/12(金) 19:01:29.43ID:msKuYMsR...テンプレート 引数を 'const A<T> &' に対して 'int' から減少できませんでした
...クラス、構造体、共用体に既定のコンストラクターがありません
...これらのオペランドと一致する演算子 "+" はありません オペランドの型: A<int> + int
0150146
2014/12/12(金) 19:13:12.95ID:msKuYMsRA<T>& operator+(const A<T>& lhs, const A<T>& rhs)
のところで
A<T>&となってるのは2chに書き込むときのミスです
A<T>&→ A<T>&
に修正します、すいません
0151146
2014/12/12(金) 19:21:25.51ID:msKuYMsRありがとう、動きました
ただ、左オペランドがTのバージョンも書く必要がある思いますけど、
そういうものなんでしょうか?
0152デフォルトの名無しさん
2014/12/12(金) 19:40:10.46ID:ljMGzqE+0153デフォルトの名無しさん
2014/12/12(金) 20:23:58.38ID:algHi5GGttp://ideone.com/XhtEKt
0154デフォルトの名無しさん
2014/12/13(土) 01:28:49.03ID:RaYBIhz1ヘッダをインクルードしてれば普通に a = kansu(); って呼び出せますが、
C++でオブジェクト指向で作る場合に、別のBって言うクラスの中に作ったkansu()を呼び出す時は、
毎回Bをnewしてインスタンス化して kansu()を使って、必要無くなったらnewしたのをdeleteするんですか。
めんどくさくないですか。
0155デフォルトの名無しさん
2014/12/13(土) 01:33:35.55ID:rg/f35yIしません
0156デフォルトの名無しさん
2014/12/13(土) 01:37:40.14ID:TNRjqhpJ勉強不足
0157デフォルトの名無しさん
2014/12/13(土) 01:39:39.48ID:RaYBIhz10158デフォルトの名無しさん
2014/12/13(土) 01:43:09.21ID:rg/f35yIちげーよ
お前はC言語でオブジェクト指向的に作るときどうしてんだよ。
そういう場合がないっていうんであればお前にはC言語以外のあらゆるモダンな言語をさわる必要がない。
0159デフォルトの名無しさん
2014/12/13(土) 01:44:44.10ID:RaYBIhz10160デフォルトの名無しさん
2014/12/13(土) 01:50:03.00ID:rg/f35yIpythonとかから始めた方がいいよ。オブジェクト指向のメリットも解らないうちからクラスを使っても無駄。
あとC++でnewは必須ではないnewはC言語のmallocの代わり
0162デフォルトの名無しさん
2014/12/13(土) 06:19:44.82ID:7YfznIJB0163デフォルトの名無しさん
2014/12/13(土) 06:36:11.46ID:ePw/V6ZqCでオブジェクト指向で作る場合にファイル内移動のfseek()を呼び出す時は、
毎回ファイルをfopenしてFILE*を取得して fseek()を使って、必要無くなったらfopenしたのをfcloseするんですか
0164デフォルトの名無しさん
2014/12/13(土) 06:45:29.95ID:54ajxy39やることによるだろうが、初心者への回答としては >>161 だろうな
> 別のBって言うクラスの中に作ったkansu()を呼び出す時は
を満たすだけならスタティックメソッド定義して B.kansu() でもいいわけだし
0165デフォルトの名無しさん
2014/12/13(土) 07:05:22.27ID:dDUZkoJjオブジェクト指向って、まずはデータありき
例えばだけど、
FILE* fp; の実体は構造体で、それに対してfpを引数に取る関数が有るが、
fputs(str, fp);
fclose(fp);
こういうのを、データとそれに対する処理をまとめて、例えばだけど、
File fp;
fp.fputs(str);
fp.fclose();
こういう風に書く、と言えば理解出来るかな?
(ちなみにこれは例で作ったでっちあげコードだから)
そういう意味で、fpに相当するデータが無い処理であれば、
File::kansu()
のように、fpを作らずC言語風に直接呼び出すようにすることも出来る。
0166デフォルトの名無しさん
2014/12/13(土) 07:28:09.18ID:3zNPC1A70167デフォルトの名無しさん
2014/12/13(土) 07:37:43.67ID:KcZztYF+0168スッキリ厨
2014/12/13(土) 08:13:03.36ID:3ehKG0WS関数には2種類ある
各インスタンスのデータを利用するメソッドと、
どのインスタンスにも関係しない、単なる関数
例えば上は、f(){
処理中に、そのインスタンスのデータをさわる
}
下は、f(a,b){return a+b;}など。
また同様に、staticメソッドも、
各インスタンスのデータを利用しない
オブジェクト指向を知らないなら、
スッキリわかる Java入門 第2版、2014を読んでみ
0169デフォルトの名無しさん
2014/12/13(土) 08:26:59.44ID:HH3VwBsv0170名無しさん@そうだ選挙に行こう
2014/12/13(土) 12:15:56.11ID:hd+JAN++0171名無しさん@そうだ選挙に行こう
2014/12/13(土) 13:32:49.82ID:uSXcAy/+0172名無しさん@そうだ選挙に行こう
2014/12/13(土) 16:09:08.14ID:uXNkXewX0173名無しさん@そうだ選挙に行こう
2014/12/13(土) 23:59:15.84ID:br/4A+040174名無しさん@そうだ選挙に行こう
2014/12/14(日) 04:39:03.82ID:GV6oAgHgこの人と同じ疑問を持ったのでURL貼らせてもらいます
int str_char(const char str[], int c)
この仮引数cはint型
でも関数呼び出しの際に実引数として使っているのは・・・
char ch;
no=str_char(str, ch)+1;
char型
int型の方が守備範囲が広いのでchar型に格納された整数値を
int型に引き渡しても問題ないという感覚ですか?
問題が起きないとしても、わざわざstr_char関数の仮引数にint型を使うメリットはあるのですか?
演習問題として出題されているのですが、仮引数部分は問題文でこのように指定されているんです。
ちなみにchar型を使っても問題は起きませんでした。
型をそろえるという話をするのであれば
main関数の方で使っているchar ch;を
int ch;とする事も考えられれるのですがコンパイル失敗します
http://newcomer.s368.xrea.com/clang/src/9/9-3.c.txt
例えば↑このサイトだとint型変数を使っているのですがコンパイルできません
int main(void)
{
int a;
scanf("%c", &a);
printf("%c\n", a);
return 0;
}
これにaを入力してもちゃんとaが表示されるので
演習問題でもいけるか?とも思ったのですが・・・
0175名無しさん@そうだ選挙に行こう
2014/12/14(日) 04:40:39.05ID:GV6oAgHg0176名無しさん@そうだ選挙に行こう
2014/12/14(日) 04:43:13.68ID:GV6oAgHgint型を指定したのはその関連なのかなとも思うのですがどうなのでしょう
0177名無しさん@そうだ選挙に行こう
2014/12/14(日) 04:52:47.80ID:ATeR7lG00178名無しさん@そうだ選挙に行こう
2014/12/14(日) 04:58:12.55ID:GV6oAgHgそれが答えなら納得できるんですけどね。
この演習問題の次の問題でも同様に検索する文字をint型で引き受けるように
仮引数が指示されてるんで、何か意味があるのかと思ってしまうんです
0179名無しさん@そうだ選挙に行こう
2014/12/14(日) 04:58:57.42ID:7UFBlXTF0180名無しさん@そうだ選挙に行こう
2014/12/14(日) 05:07:34.06ID:GV6oAgHgこの解答ではgetchar関数は使っていません
0181名無しさん@そうだ選挙に行こう
2014/12/14(日) 05:14:39.78ID:7UFBlXTF0182174
2014/12/14(日) 05:27:25.96ID:l0UGMelp>>181
気づきませんでした
ごめんなさい
なるほどです
もしかしてgetcharを使うように暗に促しているのかなとも今考えているのですが・・・
例題等の流れからするとそこまでの要求はしていないかな・・
getcharの知識をまだあまりもってないのでまた考えてみます
0183名無しさん@そうだ選挙に行こう
2014/12/14(日) 06:37:41.82ID:QEpJ0bQG>int c;
>scanf("%c", &c);
自分が何やってるか判っててやってる?
コンパイル通れば良いってもんでもない
0184名無しさん@そうだ選挙に行こう
2014/12/14(日) 06:38:27.03ID:OD3AYqGS0185名無しさん@そうだ選挙に行こう
2014/12/14(日) 07:03:24.49ID:QEpJ0bQG0186名無しさん@そうだ選挙に行こう
2014/12/14(日) 07:10:28.00ID:uroqpNDpその本が クソ でいい。いや本当に
本だから正しいってことは無いから
0187名無しさん@そうだ選挙に行こう
2014/12/14(日) 07:12:06.95ID:ZbbL2D6Aそれと比較するんだからcもint型にしてた方が良い。
0188名無しさん@そうだ選挙に行こう
2014/12/14(日) 07:20:19.23ID:2Jvuuix50189名無しさん@そうだ選挙に行こう
2014/12/14(日) 07:53:16.02ID:5XjgYXbtC言語では関数引数のcharはintに昇格されるから
getchar云々のレスは何か勘違いしてるから無視していい
まずはC言語の基礎を勉強すべき
printf("%d\n", sizeof('a')); // C言語では4(intが4byteの場合)になる。
//なおC++だと1になる
0190名無しさん@そうだ選挙に行こう
2014/12/14(日) 08:04:38.76ID:/W5tLUszそれ以上でも以下でもない
0191名無しさん@そうだ選挙に行こう
2014/12/14(日) 08:25:23.41ID:qF8SNqwq>int型に引き渡しても問題ないという感覚ですか?
理由が3つ。
一つはその通りです。
二つ目は、C標準関数にはcharの代替でintを用いる関数があるため
それに合わせたと考えられます。
すべてのchar値に加えEOFなど特別な値も表現させるためです。
三つ目は、printfなどの可変個引数の関数に渡す際には
自動的にintに変換されて渡されるため
それに何となく合わせたのだと思われます。
しかしここで少し問題があります。
charが符号付きの処理系ではそのままintに変換すると
C標準ライブラリでの文字のint表現と互換のない表現になります。
例えば
char ch = (char)'\xFF'; //0b1111'1111(マイナス1)
はintにすると
~0 // 0b11111'1111'…1'11111'1111(マイナス1)
になりますが、これはfgetcなどの表現0x000000FF(255)と違うのです。
これはstr_char内部でstr[i]==cを評価する際のstr[i]に合わせたものですが、
あまり使われる表現ではありません。
まあ間違いではないと思います。
0192名無しさん@そうだ選挙に行こう
2014/12/14(日) 08:42:25.21ID:qWIyAP97いつか、そんなのは気にならなくなるよ。動けばいいんだよ。
0193名無しさん@そうだ選挙に行こう
2014/12/14(日) 08:46:12.06ID:4Q3P90q+以前もこういうこという人いたよな
ソース出せといわれて出せなかったけど
ISO/IEC 9899:2011の6.5.2.2読んでから出直した方がいい
0194174
2014/12/14(日) 08:48:21.05ID:l0UGMelp一文字の文字コードをint型変数cに格納 かな
自分が何が分かってないのかが分からないところが独学の怖いところですね
それを自分で発見しないといけないからやっかいで・・・
>>186
分かりましたw
>>189
自分の理解だと・・
'a' は「文字定数」といい、「char型ではなく」 「int型である」
よってsizeofの引数に 'a' を指定すると、そもそもchar型ではなく
int型が引数に指定されるということになる。
つまりsizeof関数によってint型に昇格したのではなく
そもそも元からint型である
aはchar型だが、'a' はint型である
と必死に書いていたら、すでに簡潔に書いてくれていました>>190
>>191
なるほどです。
一応意味はあるだけど突き詰めていくとグレーの部分に触ってしまうとも言えるのですね
なんかスッキリしました
たぶんこの辺はもっと学習が進めば分かっていくと思うのでがんばります
>>192
はいw
0195名無しさん@そうだ選挙に行こう
2014/12/14(日) 09:41:14.99ID:hOKj1DJvISO/IEC 9899:2011 6.5.2.2 p6
If the expression that denotes the called function has a type that does not include a
prototype, the integer promotions are performed on each argument,
プロトタイプ宣言ではない表現であれば、すべての引数について整数格上げが実施される
ISO/IEC 9899:2011 6.3.1.1
If an int can represent all values of the original type, the value is converted to an int;
otherwise, it is converted to an unsigned int. These are called the integer
promotions.
整数格上げの定義
>>193
どこ読んでんだ?
0197名無しさん@そうだ選挙に行こう
2014/12/14(日) 13:18:20.07ID:/W5tLUszそもそもsize_ofは関数じゃないから発端の >>189 はどう考えてもおかしいんだけど。
0198名無しさん@そうだ選挙に行こう
2014/12/14(日) 14:31:16.83ID:hqX94Jhoそれはプロトタイプが無い場合って書いてあるだろう。
その直後にはプロトタイプが有っても可変個引数の場合の記述もある。
プロトタイプが有って可変個引数じゃない場合は段落7の通り
f(const volatile char p1); に対して char p1 = 実引数;
を実行したかのようにcharに変換される。
If the expression that denotes the called function has a type that does include a prototype,
the arguments are implicitly converted, as if by assignment, to the types of the corresponding parameters,
taking the type of each parameter to be the unqualified version of its declared type
↑ 最後に「declared type」って書いてあるだろう?
0199名無しさん@そうだ選挙に行こう
2014/12/14(日) 14:41:03.55ID:qF8SNqwqどうでもよいけれど
× printf("%d\n", sizeof('a')); // 未定義動作
○ printf("%zu\n", sizeof('a'));
0200名無しさん@そうだ選挙に行こう
2014/12/14(日) 15:28:29.91ID:Twa9q4idキャストが安全
ビッグエンディアンじゃなければ%dでも範囲内ならたぶん大丈夫
0201名無しさん@そうだ選挙に行こう
2014/12/14(日) 15:55:15.00ID:+Whl+z54あと複数のsize_t引数を%dで受け取ると読みとり位置がずれる糞処理系も。
0202デフォルトの名無しさん
2014/12/14(日) 20:04:27.03ID:uU8Xu0Kxこれで環境非依存
0203デフォルトの名無しさん
2014/12/14(日) 20:26:32.87ID:KSIBAwbk0204デフォルトの名無しさん
2014/12/14(日) 20:27:57.11ID:KSIBAwbk0205デフォルトの名無しさん
2014/12/14(日) 20:32:31.44ID:/W5tLUsz別にその程度だったら実用上問題なくね?
0206デフォルトの名無しさん
2014/12/14(日) 20:43:09.83ID:qF8SNqwq例:
struct s {char x[1024LL*1024*1024*2]};
printf("%d", (int)sizeof(struct s));//oops...
0207デフォルトの名無しさん
2014/12/14(日) 22:28:51.52ID:Twa9q4id低レベルAPIよべえええ
0208デフォルトの名無しさん
2014/12/14(日) 23:17:23.04ID:NsSmhBua器の小さい男だな
0209デフォルトの名無しさん
2014/12/14(日) 23:50:22.09ID:g1m5xeWZ0210デフォルトの名無しさん
2014/12/15(月) 05:36:46.03ID:0zemH3Hd0211デフォルトの名無しさん
2014/12/15(月) 07:39:01.48ID:EZkZoVoc0212デフォルトの名無しさん
2014/12/15(月) 20:18:04.85ID:zp/a3var永久に変わらない保証はあるのか?
0213デフォルトの名無しさん
2014/12/15(月) 20:20:44.77ID:nZ6SURCk0214デフォルトの名無しさん
2014/12/15(月) 20:28:18.07ID:zp/a3var>>213の疑問を持つ君の思考回路が不思議だ。
0215デフォルトの名無しさん
2014/12/15(月) 20:37:09.15ID:IvJkw6p6ない。
と言うか、まず1バイト=8ビットと言うのが環境依存。
バイト、と言う用語自体が8ビット単位だとは規定されてなくて
あくまで大手が採用した8ビットをよく使ってるだけだからな。
9ビットとか7ビットとかの環境も実在してたらしい。
0216デフォルトの名無しさん
2014/12/15(月) 20:41:51.10ID:oPGdzw77あえて octet として 8ビットで1まとまりの集合 と表現してるケースがあるけど
それを取り扱えるC/C++上での型は生き残って欲しいね
0217デフォルトの名無しさん
2014/12/15(月) 20:47:01.41ID:/RjxNv/gそんな保証ないし
0218デフォルトの名無しさん
2014/12/15(月) 20:49:19.37ID:/RjxNv/g> 9ビットとか7ビットとかの環境も実在してたらしい。
8以上でないとダメなので、9 はいいけど 7 はダメよ〜ダメダメ
0219デフォルトの名無しさん
2014/12/15(月) 20:58:38.17ID:IvJkw6p6あそっか、Cの仕様としては8以上だっけ
0220デフォルトの名無しさん
2014/12/15(月) 20:59:14.58ID:o90Fdm/h0221デフォルトの名無しさん
2014/12/15(月) 21:10:53.94ID:zp/a3var>8以上でないとダメなので、9 はいいけど 7 はダメよ〜ダメダメ
そうなのか。君は博識だな。感心した。
しかし、
8以上でないとダメなので、9 はいいけど 7 はダメ
みたいな曖昧さを残しているから混乱のもとでは無いのかな。
この際、『charは永久に8ビットです。』みたいに長嶋監督みたいに
言いきれば良いのに。そしたら、混乱は無くなる。
ついでにshortは2バイト、intは4バイト、longは8バイトと決めてしまえよ
と言いたい。
218、おまえ頑張ってCの規格決める委員になってやってくれ!
0222デフォルトの名無しさん
2014/12/15(月) 21:14:23.85ID:G6SMH/U84バイト極め打ちが欲しければint32_tを使え。
0223デフォルトの名無しさん
2014/12/15(月) 21:17:03.44ID:zp/a3var16バイト整数は何て呼ぶのがいいかな。そんな整数使わないか?
0224デフォルトの名無しさん
2014/12/15(月) 21:31:21.79ID:0zemH3Hdもはやlongがintのシノニムになってる環境が多かったのでそれより大きな整数型を定めるとき新たにlong longが型を作った
0225デフォルトの名無しさん
2014/12/15(月) 21:37:28.41ID:zp/a3varなんて安易な名前付けた奴を10時間くらい説教したいわ。
0226デフォルトの名無しさん
2014/12/15(月) 21:42:14.52ID:/RjxNv/g> ついでにshortは2バイト、intは4バイト、longは8バイトと決めてしまえよ
> と言いたい。
> 218、おまえ頑張ってCの規格決める委員になってやってくれ!
言いたいお前がやれよ...
0227デフォルトの名無しさん
2014/12/15(月) 21:50:38.18ID:o90Fdm/hint8_t int16_t int32_t int64_t
あるだろ。
それ使えよ
0228デフォルトの名無しさん
2014/12/15(月) 21:56:44.00ID:aecnUL4g0229デフォルトの名無しさん
2014/12/15(月) 21:58:29.29ID:zp/a3var本当かい?
良い事を聞いた。ありがとう。2014年に得た知識の中で最高の情報だ。
0230デフォルトの名無しさん
2014/12/15(月) 22:09:15.96ID:z6FuPzm/なんか悲惨だなお前
0231デフォルトの名無しさん
2014/12/15(月) 22:11:46.44ID:Rz0RJQQL0232デフォルトの名無しさん
2014/12/15(月) 22:19:02.71ID:I5N8rwo4>8以上でないとダメなので
ソースは?
0233デフォルトの名無しさん
2014/12/15(月) 22:30:28.82ID:/SsCOr8K個人的には
char : 8bits
short : 32 bits
int: 64 bits
long: 128 bits
long long : んなもの作るな
intX_t : 必須にしろ
0234デフォルトの名無しさん
2014/12/15(月) 23:09:03.37ID:kqwLJzNR次に列挙する値は, #if 前処理処理指令の中で使用するために適した定数式に置き換えられなければならない。
さらに, CHAR_BIT 及び MB_LEN_MAX に対する値を除き, これらの値は, 対応する型のオブジェクトだけからなる式が整数拡張に従って変換された場合の型と同じ型を持つ式に置き換えなければならない。
これらの処理系定義の値は, それぞれの項目の右に示してある値と同じ符号をもち, その値以上の大きさ (絶対値) をもたなければならない。
ビットフィールドでない最小のオブジェクト (バイト) におけるビット数
CHAR_BIT 8
0235デフォルトの名無しさん
2014/12/16(火) 00:28:13.49ID:3/HbEtru0236デフォルトの名無しさん
2014/12/16(火) 08:23:46.46ID:WAE7fsVoprintf("デバッグ i=%d\n", i);
#endif
みたいなのを沢山入れると見づらいので、一行でスッキリ書く方法ありますか?
printfに限定すれば自作出来そうなのですが、
printfの部分が他の関数の場合でも使える上手い方法教えて下さい。
0237デフォルトの名無しさん
2014/12/16(火) 09:04:13.81ID:SFv2CbUYlinux kernelのpr_debugみたいなの?
0238片山博文MZ ◆T6xkBnTXz7B0
2014/12/16(火) 10:09:14.66ID:SjAIoHMV#define _DEBUG_ONLY(x) x
#else
#define _DEBUG_ONLY(x)
#endif
_DEBUG_ONLY(printf("デバッグ i=%d\n", i));
0239デフォルトの名無しさん
2014/12/16(火) 10:51:27.17ID:cBSRYRo60240デフォルトの名無しさん
2014/12/16(火) 10:54:10.77ID:WAE7fsVoありがとうございます。片山先生に教えていただけるとは光栄です。
早速使わせていただきます。
_DEBUG_ONLY(x)は長いのでD(x)にしました。
0241デフォルトの名無しさん
2014/12/16(火) 12:01:54.23ID:8Ehx8+/fよい
0242デフォルトの名無しさん
2014/12/16(火) 12:22:24.48ID:sfpQIcv2じゃないの
0243デフォルトの名無しさん
2014/12/17(水) 06:08:32.12ID:JT1Z8OMa{
_tsetlocale(LC_ALL, _T(""));
wstring str1 = L"abc";
wstring str2 = L"abcdefg";
wstring str3 = L"ABC";
wstring format = L": %20.15lf, %d\n";
wprintf((str1 + wstring(10 - str1.size(), ' ') + format).c_str(), 12.345, str1.size());
wprintf((str2 + wstring(10 - str2.size(), ' ') + format).c_str(), 12.345, str2.size());
wprintf((str3 + wstring(10 - str3.size(), ' ') + format).c_str(), 12.345, str3.size());
}
VS2013で出力の ":" の位置を揃えたいので上のようなのを試したのですが、文字列の中に全角文字があると
ずれてしまいます。どうすれば良いでしょうか?
0244デフォルトの名無しさん
2014/12/17(水) 06:49:06.64ID:hbZ0TZdXそれはさて、どの途プロポーショナルフォントなら揃わないだろ。
0245デフォルトの名無しさん
2014/12/17(水) 07:45:20.75ID:JT1Z8OMa>なんで%-10sを使わないんだ?
そうですね、それでも良いのですが、兎に角、位置を揃える方法ありますか?
どんなに変な方法でも構いません。
0246デフォルトの名無しさん
2014/12/17(水) 07:54:26.07ID:OmIW45Kiグラフィックとして文字を表示、かな。
0247デフォルトの名無しさん
2014/12/17(水) 07:54:36.84ID:SKijSNg0表示幅を配列にでも格納しておき、それを使って計算する。
0248デフォルトの名無しさん
2014/12/17(水) 07:57:48.19ID:JT1Z8OMaあるいはファイルに出力する場合もあります。
使うフォントはMSゴシックです。
この前提で、何か良い方法ありますか?
0249デフォルトの名無しさん
2014/12/17(水) 09:46:07.25ID:ljfuwyTd0250デフォルトの名無しさん
2014/12/17(水) 10:10:45.50ID:1UMPa1MZstring使えば揃う
#include <stdio.h>
#include <string>
using namespace std;
int main()
{
string str1 = "abc";
string str2 = "abcdef";
string str3 = "ABC";
printf("%-20s:%20.15f,%d\n", str1.c_str(), 12.345, str1.size());
printf("%-20s:%20.15f,%d\n", str2.c_str(), 12.345, str2.size());
printf("%-20s:%20.15f,%d\n", str3.c_str(), 12.345, str3.size());
}
/*
abc : 12.345000000000001,3
abcdef : 12.345000000000001,6
ABC : 12.345000000000001,6
*/
0251デフォルトの名無しさん
2014/12/17(水) 11:00:20.78ID:JT1Z8OMaレスありがとうございました。
wstringでやりたいのですが、無理そうですね。
0252デフォルトの名無しさん
2014/12/17(水) 12:14:17.97ID:ev+qw7pl0253デフォルトの名無しさん
2014/12/17(水) 12:39:49.74ID:1UMPa1MZ前提から、全角文字の表示幅が半角文字の環境なんだから
表示したい文字列の一つ一つの文字種を調べて、全角なら半角2文字文として表示幅を計算すればいい
stringで揃ったのは全角が2バイトだからだけど、とても環境依存だから要注意
0254デフォルトの名無しさん
2014/12/17(水) 22:11:31.32ID:xIXyOP7Gほい
http://ideone.com/WJYenn
0255デフォルトの名無しさん
2014/12/18(木) 09:58:16.56ID:9zdFGHwAありがとうございました。いい感じで行けました。感謝です。
ビット演算はよく分らないので普段あまり使わないのですが
size += (ch & ~0xFF) == 0 ? 1 : 2; // オリジナル
size += (ch <=255) ? 1 : 2;
こんなのでも問題ないでしょうか?いちおう同じ動作のようなのですが。
0256デフォルトの名無しさん
2014/12/18(木) 13:15:31.19ID:81l/o61zchが負数のとき動作が変わるけど、ほぼ大丈夫だと思う
windowsのwchar_tはunsignedみたいだし
0257デフォルトの名無しさん
2014/12/18(木) 13:53:07.38ID:M1EWXYxl>>255
半角カナが全角扱いされるけどいいのか?
0258254
2014/12/18(木) 14:45:54.46ID:Mboq20NA存在を忘れていたすまぬ
size += (ch<127 || (0xFF61<=ch && ch<=0xFF9F)) ?
1 : 2;
0259デフォルトの名無しさん
2014/12/18(木) 20:11:25.44ID:on3AHD1c0260デフォルトの名無しさん
2014/12/18(木) 21:24:09.44ID:0A0mu87l0261デフォルトの名無しさん
2014/12/18(木) 21:26:24.61ID:XRwKyCQA0262デフォルトの名無しさん
2014/12/19(金) 10:15:27.82ID:Gv3qWP/n新しい関数など追加する時、ファイルの末尾に追加しますか?
先頭に追加しますか?私は基本的には先頭に追加しています。
不可意味はありませんが。
0263デフォルトの名無しさん
2014/12/19(金) 10:22:15.08ID:Gv3qWP/n○ 深い意味
0264デフォルトの名無しさん
2014/12/19(金) 11:21:46.10ID:DKkZHFawプロトタイプと実装の不整合が起きるのを嫌う人が多いように思う
俺もそう思って先頭に書くことが多い
後ろに追加するタイプの人は、それは揃いで修正するものだし
そもそもヘッダ書くときは自然とそうなるじゃんって考えるのかもな
…でも、別ファイルの場合は、ファイル毎にカーソル位置が維持されてるけど
同一ファイルだと画面分割やジャンプマーカー、
IDEの定義ジャンプ使うとかになるから微妙に感じが違うんだよなあ
0265デフォルトの名無しさん
2014/12/19(金) 15:57:15.63ID:M007GgfU前後に関連する関数が並んでた方が都合良い場合
0266デフォルトの名無しさん
2014/12/19(金) 19:29:29.56ID:IN4kTmtP0267デフォルトの名無しさん
2014/12/19(金) 20:24:05.80ID:HBs21ByZ0268デフォルトの名無しさん
2014/12/19(金) 20:37:22.69ID:KN8cPhgb0269デフォルトの名無しさん
2014/12/19(金) 20:47:06.98ID:3n+MCOD2後ろに追加するタイプの人も馬鹿
意味を理解できず形式でのパターン認識しかできないアスペ
意味を考えて関連する関数の隣に追加する>>265が正解
0270デフォルトの名無しさん
2014/12/19(金) 21:38:14.13ID:oEjuXAA40271デフォルトの名無しさん
2014/12/19(金) 22:17:01.06ID:djnaYo+50272デフォルトの名無しさん
2014/12/19(金) 22:36:01.77ID:hnfO2v+W末尾のほうがdiff失敗しにくい気がするからそうしてる
0273デフォルトの名無しさん
2014/12/20(土) 00:03:20.11ID:jir7SMapプログラム起動中の処理
さらにその初期化・動作部・後始末
終了時後始末関係
って感じでやってるわ
0274デフォルトの名無しさん
2014/12/20(土) 00:06:45.11ID:m/I2dwZEその方が対象になってて読みやすいし、その2つは大概セットで弄るから近いほうがいい
0275デフォルトの名無しさん
2014/12/20(土) 00:07:12.74ID:QOAtTpic0276デフォルトの名無しさん
2014/12/20(土) 00:25:17.05ID:vyTasIsK0277デフォルトの名無しさん
2014/12/20(土) 00:27:31.84ID:dFj/JFMf何も考えずに適当に定義する奴が一番うざい
複数人で編集してそれぞれが別々のポリシーだと更につらい…
0278デフォルトの名無しさん
2014/12/20(土) 10:38:06.68ID:DXs99VMy最近のコンパイラさんは親切
CLANGのprintfの書式までみたエラー報告を観て、乗り換えることに決めたし
0279デフォルトの名無しさん
2014/12/20(土) 13:30:45.46ID:e+FqSQyUこんな糞コード書きやがってボケが
0280デフォルトの名無しさん
2014/12/20(土) 13:33:30.15ID:e+FqSQyUPHPですね判ります
0281デフォルトの名無しさん
2014/12/20(土) 15:15:21.98ID:eYLVnGdK初期化してねーよ。
ほんとに代入文でいいのか。
returnがねーんだよ。
何回 エラー出すんだよ やめちまえ
0282デフォルトの名無しさん
2014/12/20(土) 16:44:49.79ID:acQ5HpBRif文とかでよくお世話になてますgccさま
0283デフォルトの名無しさん
2014/12/20(土) 18:30:26.22ID:/92Bh633全角スペースになってた
0284デフォルトの名無しさん
2014/12/20(土) 21:31:56.51ID:dbUt4Kp+けれどメンバ関数やメンバ変数を持つ事は出来ますか?
0285デフォルトの名無しさん
2014/12/20(土) 21:33:49.01ID:acQ5HpBR0286デフォルトの名無しさん
2014/12/20(土) 21:51:24.19ID:QOAtTpic0287デフォルトの名無しさん
2014/12/20(土) 22:10:44.44ID:dbUt4Kp+使えるんですか?本当ですか?
toString()みたいなメソッドを追加してenumの要素の名前を
文字列化することが出来ないかなあと思ったのですが、、、
出来ますか?
0288デフォルトの名無しさん
2014/12/20(土) 22:29:04.46ID:cUhMXe+F持てないので無理
>>285-256 は老害なので無視していい
0289デフォルトの名無しさん
2014/12/20(土) 23:04:33.69ID:G6vI+a3jっていいの?
struct Koo
{
void del()
{
delete this;
}
};
Koo koo;
koo.del();
なんて合法ですか?
0290デフォルトの名無しさん
2014/12/20(土) 23:11:03.98ID:vyTasIsK0291デフォルトの名無しさん
2014/12/20(土) 23:45:43.13ID:mIAMy6Br0292デフォルトの名無しさん
2014/12/21(日) 00:58:35.85ID:r5O7MXix0293デフォルトの名無しさん
2014/12/21(日) 02:18:57.27ID:ANxxvVGk現在OpenCV2.4.10とDxLibを併用して使っているのですが、findContoursメソッドを使用すると
ヒープが壊れたというランタイムエラーが発生してしまいます
どうにか回避方法を教えていただきたいです
↓ソースです
http://codepad.org/hS14MmrI
環境はWindows vista(32bit) visual studio 2010
0294デフォルトの名無しさん
2014/12/21(日) 02:28:52.48ID:M3TgxH+N0295デフォルトの名無しさん
2014/12/21(日) 02:31:43.61ID:ANxxvVGk一応ひと通り検索して上記のサイトの通りcv::Matでも試してみましたが同じエラーでした
0296デフォルトの名無しさん
2014/12/21(日) 06:58:00.56ID:JuGLyqd7enum class Word {FUCK, SHIT};
std::string ToStr(Word word)
{
switch (word)
{
case Word::FUCK: return "FUCK";
case Word::SHIT: return "SHIT";
}
}
0297デフォルトの名無しさん
2014/12/21(日) 08:44:42.22ID:ca+yvWC9{
... // 処理
}
みたいなループの処理の中で、例えばi=200のときに原因不明のエラーが
発生するのでデバッガのブレークポイント●置きたい時に
if(i==200)
● int aaa = 777;
みたいに適当な文を入れてブレークポイント●で止めているのですが、上級者の方は
どのようにされているのでしょうか?
0298デフォルトの名無しさん
2014/12/21(日) 09:16:16.34ID:7WbNxZ9e0299デフォルトの名無しさん
2014/12/21(日) 09:17:15.87ID:4JRzeYEu合法、但しdelete thisより後には自身のメンバを参照したり設定したりといったことはせずに抜けること
戻り値などに必要なら、ローカル変数などに予め計算し退避してからdelete this、退避した値をすぐ返して抜ける感じ
0300デフォルトの名無しさん
2014/12/21(日) 09:29:07.64ID:DnWIXG3hC/C++の話じゃなくてIDEの話やな
0301デフォルトの名無しさん
2014/12/21(日) 09:36:16.20ID:ca+yvWC9ありがとうございました。こんな便利な機能があったとは。
0302デフォルトの名無しさん
2014/12/21(日) 10:20:05.15ID:jGyxCecVまた、メモリリークを起こすかどうか調べる方法はありますか?
struct STest0 {
char* p;
STest0 () { p = new char[1000]; }
~STest0 () { delete[] p; }
};
struct STest1 {
STest0* p;
STest1 () { p = new STest0[1000]; }
~STest1 () { delete[] p; }
};
int main(void) {
STest1* p;
p = new STest1;
delete p;
return 0;
}
0303デフォルトの名無しさん
2014/12/21(日) 10:44:53.60ID:DnWIXG3hメモリリークを調べるにはIDEの用意した機能を使うか
よくやるのはplacement newを使って確保したメモリを全部しらべるか
0304デフォルトの名無しさん
2014/12/21(日) 11:16:32.02ID:/0FePQ7L単にそれだけなら問題ないが生ポインタを直接使うとリークと二重解放の危険がある
{
Stest0 a,b;
a = b; //aのポインタはリーク
} //a,bともに同じポインタをdeleteして未定義動作
boost.optional使っとけ
>>303
無能は黙ってろ
0305デフォルトの名無しさん
2014/12/21(日) 11:20:03.33ID:pUBdq9m4(そのmain処理の場合は)メモリーリークは起こらないよ(、ただし、常に起こらないとは限らない)、が正しい
0306デフォルトの名無しさん
2014/12/21(日) 11:25:39.60ID:/0FePQ7L0307デフォルトの名無しさん
2014/12/21(日) 11:35:03.17ID:DnWIXG3h俺が無能呼ばわりされたのはなんで?
0308デフォルトの名無しさん
2014/12/21(日) 11:40:23.12ID:/0FePQ7L生ポインタを直接使う危険な書き方について初心者にお墨付きを与えるような回答をしたから。
君のアスペの典型例のような回答によってまた世の中に信頼性の低いゴミプログラムが量産されることなる。
あとplacement newじゃなくてnewのオーバーロードだろ君か言いたいのは
0309デフォルトの名無しさん
2014/12/21(日) 11:44:25.99ID:yks2ucd5あのさあ…
>>307
そいつのことはほっとこう。
0310デフォルトの名無しさん
2014/12/21(日) 11:45:33.30ID:DnWIXG3hもちろん上のコードを見た時は色々言いたいことがあったけど
掲示板上で相手の姿を勝手に想像して余計なことを言うよりはマシだと思ったので
聞かれたこと以上のことは言わなかったよ
0311デフォルトの名無しさん
2014/12/21(日) 12:00:03.61ID:/0FePQ7Lすくなくともクラスのメンバに生ポインタを持たせるときは
コピーコンストラクタと代入演算子を定義するべきだとアドバイスするべきだと思うんだ
0312デフォルトの名無しさん
2014/12/21(日) 12:11:30.00ID:HpxqpUIE布教活動なら駅前でやれ
0313デフォルトの名無しさん
2014/12/21(日) 12:15:05.13ID:kuosliUP現在はオブジェクトの配置を操作する場合に限らず全部ひっくるめて placement new と
呼ぶのが普通だろう。
0314デフォルトの名無しさん
2014/12/21(日) 12:24:53.70ID:iboby73v何処の普通なの?
0315デフォルトの名無しさん
2014/12/21(日) 12:30:03.51ID:/0FePQ7L0316デフォルトの名無しさん
2014/12/21(日) 12:31:30.08ID:iboby73v0317デフォルトの名無しさん
2014/12/21(日) 12:40:37.37ID:kuosliUPたとえばWikipedia「New演算子」
http://ja.wikipedia.org/wiki/New%E6%BC%94%E7%AE%97%E5%AD%90
ここの「配置new」の項とか、Effective C++ 第3版 p.278とか。
0318デフォルトの名無しさん
2014/12/21(日) 13:03:50.24ID:RezxTVbjA.配置を目的としたもの
B.配置を目的としないけどnew(引数※1) 型(※2)の※1を伴うもの
C.new演算子のオーバーロード全般
Cを含むかどうかはっきりさせろ。
ちなみにISO/IEC 14882:2011でA Bを配置と読んでいる
0319デフォルトの名無しさん
2014/12/21(日) 13:20:18.85ID:kuosliUP実際、Bの placement new でリークチェックを行う環境はあるわけだし。
0320デフォルトの名無しさん
2014/12/21(日) 13:33:13.93ID:NUMS41YM>>313が違う話をしだした。
>>313の内容自体は正しくて
それまでの話とも矛盾はしてないのに
それまでの話を否定をしているかの様な言い回しだったため
混乱を招いた
0321デフォルトの名無しさん
2014/12/21(日) 13:40:19.32ID:e2fIb+kJすまんが placement new はすでに確保してある領域に対してコンストラクタを走らせる **だけ** の機能なので、
領域確保と解放の整合性に使えるとは思えないが、どうしてそんなものを思いつくのか?
C で malloc()/free() をラップするように、C++ では延々と new をオーバーロードするのが、回り道のようにみえて手っ取り早い
0322デフォルトの名無しさん
2014/12/21(日) 13:47:29.36ID:XqMqoIPNと>>310で述べているものを
>>303の主張がおかしいと称して
話を混乱させる>>321であった
0323デフォルトの名無しさん
2014/12/21(日) 15:49:15.34ID:OSCBEJaL世界の
0324デフォルトの名無しさん
2014/12/22(月) 07:46:30.88ID:rVdLl1iU「配置new (プレースメントnew, placement new)は、new演算子からnew演算子関数へ引数を与えられる機能である。
当初、インスタンスを特定のメモリアドレスに「配置」するための機能ということで配置newと命名された。
後に配置に限らず様々な使い道に応用できることが明らかとなったものの、今でも慣習的に配置newと呼ばれる。」
とか書いてあるが、初めて聞いたぞこんなの。
0325デフォルトの名無しさん
2014/12/22(月) 08:22:09.63ID:kdPOQGvBところで、配置newではないnewのオーバーロードってどういうものを言うんだろう?
0326デフォルトの名無しさん
2014/12/22(月) 08:47:45.78ID:rVdLl1iU個人的にもやもやするんで調べたのだが
Wikipediaの記述の参考にしているらしいEffective C++ 第三版には
「... ここでは追加で一つのvoid*引数を取るnew演算子をplacement newと呼ぶが
追加の引数を取るnew演算子全般を指してplacement newと呼ぶこともある」
って書いてあるっぽい(雑な役)
https://books.google.co.jp/books?id=Qx5oyB49poYC&printsec=frontcover&dq=effective+c%2B%2B+revised+3&hl=ja&sa=X&ei=YFmXVP_SLOi8mgXczoKQAg&ved=0CEsQ6AEwBjgK#v=onepage&q=placement%20new&f=false
の258ページ。
検索上位に来ていたロベールには
http://www7b.biglobe.ne.jp/~robe/cpphtml/html03/cpp03049.html
>引数付きの new のことを placement(プレイスメント)形式の new といいますが、
>このコンストラクタを呼ぶだけの new のこともただ単に placement new と呼びます。
と書いてある。
事実上、追加の引数を取るnewオーバーロード全般を指して「placement new」と呼ばれることがあるらしい。
個人的にはあんまり納得できないけど。
0327318
2014/12/22(月) 09:34:43.95ID:UkKFD8pdメモリリーク検出とあったので
struct STest0 {
void * operation new (std::size_t s) {
…//ログhere
return ::operator new (s);
}
};
のシリーズのつもりで書いた
これをオーバーロードと呼ぶかどうかは確認せずに掻いた
0328デフォルトの名無しさん
2014/12/22(月) 20:48:10.59ID:PJrTpgsR人のふり見て我がふり直せだな
0329デフォルトの名無しさん
2014/12/22(月) 22:00:28.03ID:3C7mXd7r::operator new 自体をラップして delete と対にしたいところだ
0330デフォルトの名無しさん
2014/12/22(月) 22:57:33.43ID:kdPOQGvB>>327は省略してるだけで、当然、対応する operator delete も定義するんだと思うが。
このうえさらにグローバルな ::operator new をラップするのって何か役立つのかね?
というかそれ以前に、どこでラップするんだろう。
0331デフォルトの名無しさん
2014/12/22(月) 23:30:14.04ID:3C7mXd7rデバッグ時限定で、delete 忘れがないか、あるいは二重に delete していないか、チェックしたいところだが
そういうときに ::operator new や ::operator delete あるいは ::operator new[], ::operator delete[] をオーバーライドして、これらのチェックをコードで確かめておくのはよくあることだと思うけれども
0332デフォルトの名無しさん
2014/12/22(月) 23:48:51.17ID:5zcMGUmsdelete直前でassert p != NULL
delete直後にp = NULLじゃあかんの?
0333デフォルトの名無しさん
2014/12/23(火) 00:02:45.08ID:BjZtfoSn0334デフォルトの名無しさん
2014/12/23(火) 00:11:00.59ID:ghEK2YZTそんなごちゃごちゃしなくてもスマートポインタ・標準コンテナ使えば大方解決する問題じゃないの?
0335デフォルトの名無しさん
2014/12/23(火) 00:18:43.98ID:dkZcT41Aそれは>>327でもできるんじゃないの?というかそのための>>327でしょ。
そのかわりに ::operator new でやるというのはあるだろうけど、それぞれ得失はあるよね。
::operator new を置き換えたら元の ::operator new は使えないから、メモリ管理全部自前で
実装しなきゃならないんじゃなかったかな?
0336デフォルトの名無しさん
2014/12/23(火) 00:40:32.00ID:4lbeIKul流れ無視?
0337デフォルトの名無しさん
2014/12/23(火) 01:10:04.67ID:wokCfcTD生ポでメモリリーク検出したい
↓
配置newでおk
↓
配置newは関係ないだろ
↓
オーバーロードの間違いでした。例えば>327
↓
グローバルnew使うのがフツー
↓
クラスメンバーのnewでいいだろ
↓
スマポ使えば? ←アスペ
0338デフォルトの名無しさん
2014/12/23(火) 04:39:12.70ID:n6FqVsoT普段はnewするだけのクラスで、そのオブジェクトを管理するオブジェクトの削除時に一気に全削除するようなとき
VirtualAllocで十分なメモリ空間リザーブして必要に応じてコミット拡張、実際の解放はdeleteでやらずVirtualFreeで全領域リリースとか
0339デフォルトの名無しさん
2014/12/23(火) 08:09:35.89ID:ATuB6kuL>メモリ管理全部自前で実装しなきゃならないんじゃなかったかな?
まあ、そういうことだが、そんなに大変じゃない‥
0340デフォルトの名無しさん
2014/12/23(火) 09:31:59.72ID:wii8BwF3そのような用途のために
std::vector<T, ★>
コイツがあるんじゃないの
0341デフォルトの名無しさん
2014/12/23(火) 13:01:39.97ID:Hv7cUDq/生ポでメモリリーク検出したい に スマポ使えば?
これ、日本のマなら普通だろう。
コミュ能力なくて他の仕事に就けない奴でもマには普通になれるし
0342デフォルトの名無しさん
2014/12/23(火) 13:30:13.09ID:1GUI4T670343デフォルトの名無しさん
2014/12/23(火) 13:34:41.39ID:zn+tl5Qaだがや
0344デフォルトの名無しさん
2014/12/23(火) 14:05:30.06ID:BwyGxBnAコミュ能力 ないの?
生ポのメモリリークから始まって、new演算子オーバーロードによる
フック的な使い方の実現方法の話になっていた矢先に
>>334がスマポとか言い出したから
>>336が「流れ無視?」と言ったんだよ。
0345デフォルトの名無しさん
2014/12/23(火) 14:24:35.93ID:7c77wjGC初歩的なところの理解力だと思うがw
0346デフォルトの名無しさん
2014/12/23(火) 16:20:07.71ID:gTJoh1O60347デフォルトの名無しさん
2014/12/23(火) 16:24:39.67ID:zkNCry36スマホとPCでIPと文体変えて
自作自演するんだろ?
0348デフォルトの名無しさん
2014/12/24(水) 00:16:43.51ID:0gOuJHpSstruct B : public A {virtual void test() {}}
struct C : public B {virtual void test() {}}
みたいな関係の三つのクラスを定義して
A *a = new C;a->test();するとき、
BやCのtestにvirtualつけるか否かって意味ないですよね?
今確かめたらそうなってました。
Bでvirtual外すと、Cでオーバーライドできない、
なんてことがあった時代がありますか?(←質問)
おぼろげながら、十数年前はそういう理解だったのですが、
それは当時も俺が勝手に勘違いしてただけでしょうか。
0349デフォルトの名無しさん
2014/12/24(水) 00:18:40.64ID:89gWHyFb0350デフォルトの名無しさん
2014/12/24(水) 00:18:58.95ID:ndV3e2Gaありません。
今は
struct C : public B {virtual void test() override {}};
としておくのが良いでしょう。
0351デフォルトの名無しさん
2014/12/24(水) 00:31:32.93ID:jLPsl9W6さっそくありがとうございます!
すっきりしました。overrideキーワードについても早速ぐぐりました。
0352デフォルトの名無しさん
2014/12/24(水) 08:46:59.00ID:i2RnFyzZ0353片山博文MZ ◆T6xkBnTXz7B0
2014/12/25(木) 21:23:08.86ID:gEw73of1site_t total_size(const T_CONTAINER& c)
{
return c.size()*sizeof(T_CONTAINER::value_type);
}
template <typename T_VALUE, size_t t_siz>
size_t total_size(const T_VALUE (&)[t_siz])
{
return t_siz*sizeof(T_VALUE);
}
どや?
0354デフォルトの名無しさん
2014/12/25(木) 21:39:56.60ID:XFKTSJbC会話のできないコミュ障は無視してください
0355片山博文MZ ◆T6xkBnTXz7B0
2014/12/26(金) 00:18:24.45ID:rmtyj285コンテナの実データサイズを求めるテンプレート関数、
並びに配列の実データサイズを求めるテンプレート関数である。
0356デフォルトの名無しさん
2014/12/26(金) 03:51:53.07ID:D07w3ybzついでに言うと、中途半端な略語も気持ち悪い。
typename T_VALUE, size_t T_SIZE>でいいだろうに。
0357デフォルトの名無しさん
2014/12/26(金) 07:07:58.62ID:JqjrriTa後から 一 応 説明とか
スレ荒らすなボケ
0358デフォルトの名無しさん
2014/12/26(金) 07:25:25.68ID:oCZZOout0359デフォルトの名無しさん
2014/12/26(金) 14:14:24.94ID:QU2ITzw/0360デフォルトの名無しさん
2014/12/26(金) 14:20:10.71ID:KN+qDrDJ0361デフォルトの名無しさん
2014/12/26(金) 19:38:26.37ID:Eg1IvU+Y1.仕様通り一旦コードポイント値を経由して変換
2.UTF16のサロゲートペアをくっつけて本来の範囲外の値になったら
セキュリティ攻撃の可能性あり
以上
0362デフォルトの名無しさん
2014/12/26(金) 19:39:49.53ID:y3Oe54D20363デフォルトの名無しさん
2014/12/26(金) 20:20:42.84ID:QU2ITzw/ありがとうございます
今結局自力でゴリゴリ書き始めてしまったので
後ほどレビューなどお願いするかもです
0364デフォルトの名無しさん
2014/12/26(金) 21:07:27.67ID:y8SP1A+Y0365デフォルトの名無しさん
2014/12/27(土) 07:33:03.44ID:x6PZI0I4int add(int a, int b, int c)
{
return a + b + c;
}
int main()
{
// 第1引数のみを先に渡す
using namespace std::placeholders;
std::function<int(int, int)> f = std::bind(add, 2, 3,_1);
// 残りの引数を渡して関数を呼び出す
const int result = f(4);
std::cout << result << std::endl;
}
ってなんで怒られるんですか?
0366デフォルトの名無しさん
2014/12/27(土) 07:52:41.58ID:rEUVsFmlじゃね?
0367デフォルトの名無しさん
2014/12/27(土) 09:42:09.61ID:CuOP4Fspfunction<int (int)> f = [](int p3){return add(2,3,p3);};
って書けばいいのに
0368デフォルトの名無しさん
2014/12/27(土) 10:33:22.27ID:quCM7twS0369デフォルトの名無しさん
2014/12/27(土) 10:39:43.28ID:AKOS2ykDclassの指向オブジェクト指向を強制
0370デフォルトの名無しさん
2014/12/28(日) 09:47:40.91ID:P1K5BTgMそれっぽさを演出できるから。
あるいは計算機とエンドユーザーへの責任を度外視して、
プログラマー to プログラマーへの視野狭窄に導けることにうま味が在るから。
0371デフォルトの名無しさん
2014/12/28(日) 10:54:40.87ID:wGcMfnl70372デフォルトの名無しさん
2014/12/28(日) 10:58:36.54ID:IcTImvMZbindの対象はパラダイムだったのか…
0373デフォルトの名無しさん
2014/12/28(日) 12:11:24.98ID:eu5U9PUPC++版クロージャ?
0374デフォルトの名無しさん
2014/12/28(日) 12:13:50.50ID:y0iU2hTK0375デフォルトの名無しさん
2014/12/28(日) 12:52:34.97ID:9q//Spjc例えばこんな事出来たり
http://ideone.com/EjIPbh
0376デフォルトの名無しさん
2014/12/28(日) 12:57:02.03ID:9q//Spjchttp://ideone.com/iDFhJn
0377デフォルトの名無しさん
2014/12/28(日) 13:07:35.25ID:jziI97g3クロージャだけど、
多変数関数の変数をその場の環境の変数を取り込んで
変数の数を減らすことに特化した関数です。
0378デフォルトの名無しさん
2014/12/28(日) 19:28:47.72ID:y4TfDgzk”束縛”の意味がようやくしっくりきたわ
意外と単純なんだなサンクス
0379デフォルトの名無しさん
2014/12/29(月) 01:06:38.85ID:knqa+3O70380デフォルトの名無しさん
2014/12/29(月) 01:20:13.23ID:WSMIpiRwmem_fun : 引数無しで呼び出す関数オブジェクトを作成。
使い物にならずC++17で無くなる予定。
mem_fn : 引数ありも対応した関数オブジェクトを作成。
0381デフォルトの名無しさん
2014/12/29(月) 01:45:47.32ID:knqa+3O7分かりやすい説明ありがとうございます。
0382デフォルトの名無しさん
2014/12/29(月) 17:58:36.07ID:dD2FvgMNvoid func(int *x){} (1)
void func(int x[]){} (2)
って、厳密に同じなのかどうか知らないのですが、同じように動きますよね。
じゃあ、const を付けて
void func(int const *const x){}
とすると、これに相当する(2)はどう書けば良いのでしょうか?
0384デフォルトの名無しさん
2014/12/29(月) 18:19:46.49ID:dD2FvgMNレスありがとうございました。
厳密に同じですか。すっきりしました。
0385KUSO KOTE ◆unko./w.Osri
2014/12/29(月) 18:33:56.51ID:noPqS2+S失礼、スレを間違えた。
C++では指定できませぬ。Cなら
void func(int const x[const]);
0386デフォルトの名無しさん
2014/12/30(火) 02:30:08.91ID:8Geo16jiプロジェクトによって出力内容が少し変わるような場合ってどうしてる?
そのクラスは機能毎に分けられてる小さなクラスで
将来プロジェクトAとBに使用された場合ログ出力部分だけが
プロジェクトAとBで違う動作になる感じ
0387デフォルトの名無しさん
2014/12/30(火) 02:31:29.09ID:Bg2J28qP//なんやかんや時間のかかる処理
}
マルチスレッド、マルチコア処理で記述していなかったら
testの実行を開始したプロセッサと、実行中のプロセッサと終了時のプロセッサは必ず同じなのですか?
0388デフォルトの名無しさん
2014/12/30(火) 02:33:22.01ID:/MaaffoKOS依存です。
0389デフォルトの名無しさん
2014/12/30(火) 02:36:06.60ID:Bg2J28qPwin7だとどうなんですか?
0390デフォルトの名無しさん
2014/12/30(火) 02:44:33.76ID:/MaaffoK同じとは限りません。
タスクマネージャーなどから特定のプロセッサのみで実行するよう変更出来ます。
しかし通常のプログラムはどのプロセッサで実行されているか意識する必要はありません。
0391デフォルトの名無しさん
2014/12/30(火) 03:19:40.61ID:Bg2J28qPスケジューラによってプロセッサが奪取されて、プロセッサ0は別プロセスの別スレッドに割り当てられたとして
そのとき、プロセッサ1は暇だとしたら
testの実行はプロセッサ0が空くのを待つのか、プロセッサ1で実行されるのかを知りたいです。
0392デフォルトの名無しさん
2014/12/30(火) 03:23:46.74ID:XvnsidX9またまた3で実行されるかもしれない
0393デフォルトの名無しさん
2014/12/30(火) 03:31:26.97ID:Bg2J28qP0を待つか、他の空きを使用するかと質問しているのですが。
0394デフォルトの名無しさん
2014/12/30(火) 03:35:33.12ID:XvnsidX90395デフォルトの名無しさん
2014/12/30(火) 03:45:17.75ID:Bg2J28qPもういいや、あなた方では答えれない内容なんでしたねw
0396デフォルトの名無しさん
2014/12/30(火) 03:47:55.25ID:/MaaffoK0397デフォルトの名無しさん
2014/12/30(火) 04:15:51.37ID:XvnsidX90398デフォルトの名無しさん
2014/12/30(火) 04:26:41.92ID:iV8mgJ7+んなこたーない。
>0を待つか、他の空きを使用するか
オペレーティングシステムの気分次第。
だが明示的にアフィニティーを指定しない限り
変わったところを見たことがない
0399デフォルトの名無しさん
2014/12/30(火) 04:34:31.67ID:iV8mgJ7+その少し違う設定変更をする関数を作るんでは?
log::configure(プロジェクトA);
0400デフォルトの名無しさん
2014/12/30(火) 08:22:56.74ID:Bg2J28qP>>0が他プロセスで使用されていると仮定しているから0で実行はありえないですよね
>んなこたーない。
となると、1つのプロセッサが同時に別のコードを実行していることが可能になりますね
他プロセスがそのプロセッサを奪取されない限り、他のコードが実行できるとは思えませんが。
0401デフォルトの名無しさん
2014/12/30(火) 09:54:13.10ID:zkZ/8BgU「アフイニティ」というキーワード教えてもらっただろ。
調べてから出直せ。
0402デフォルトの名無しさん
2014/12/30(火) 09:54:45.64ID:zkZ/8BgU「アフィニティ」というキーワード教えてもらっただろ。
調べてから出直せ。
0403デフォルトの名無しさん
2014/12/30(火) 09:58:11.20ID:4ECZ2rvD> 将来プロジェクトAとBに使用された場合ログ出力部分だけが
> プロジェクトAとBで違う動作になる感じ
出力ルーチンをプロジェクト毎に持ちたいだけなら、派生させて出力ルーチンをオーバーライドすればいいと思う
0404デフォルトの名無しさん
2014/12/30(火) 11:41:48.76ID:zX6Ie/Md「プリエンプション」を調べて出直せ。
調べるまでもう来るな。
0405デフォルトの名無しさん
2014/12/30(火) 16:27:00.13ID:f6h/n6k9これだけならprintf、boost::formatなんかのフォーマット部分、streamならプロダクトごとに違う文字列をマクロにするだけでいいような気がする
0406デフォルトの名無しさん
2014/12/30(火) 16:28:25.48ID:vcq00+gc0407デフォルトの名無しさん
2014/12/30(火) 20:00:38.20ID:Bg2J28qP0408デフォルトの名無しさん
2014/12/30(火) 20:23:20.90ID:r9t5aSE40409デフォルトの名無しさん
2014/12/30(火) 20:29:09.38ID:/MaaffoK0410デフォルトの名無しさん
2014/12/30(火) 22:23:47.80ID:4Rm6u9YB例:「JAVA? フッ俺らCだから。コンピューターの基礎だぜ」
0411デフォルトの名無しさん
2014/12/30(火) 23:57:27.06ID:8Geo16jiありがとう!
0412デフォルトの名無しさん
2014/12/31(水) 11:28:22.65ID:3wvmlGUBオンラインゲーム(三人以上)を作ろうとしているのですが、サーバーマシンが用意できそうにないので
参加者同士でネットワークを形成するデザインにしようと思っています。
しかし、お互いの接続を確認するだけだと、自分がネットから切断された状況とほかの参加者が全員同時に切断された状況の区別がつきません。
Googleなど、インターネットにつながっていればまず繋がるサイトにリクエストを出してみる方法も考えましたが、あまりスマートとは思えません(外部から切断されたLAN接続にも対応できませんし)。
ネットワークトポロジーをフルコネクトでなくスター型にするれば参加者の切断を検知することは容易ですが、ハブが切断した時の対応を考えると無理がありそうです。
(ゲームが中断しないようにほかの参加者をハブに立てようとすると結局全員の接続を確認する必要があるため、フルコネクトと同様の問題が起こる)
かなりワガママな話ですがうまい方法はないでしょうか……。
開発環境はWin8.1、VC++
動作環境は極力広くお願いします
0413デフォルトの名無しさん
2014/12/31(水) 12:06:23.87ID:4sDUohW80414デフォルトの名無しさん
2014/12/31(水) 12:16:17.02ID:Imw1KDaA0415KUSO KOTE ◆unko./w.Osri
2014/12/31(水) 12:28:37.19ID:Bw72ym5wネトゲーは知りませぬが遠隔地クラスタリングでは
「自分を含めて過半数と通信できるグループ(ノードマジョティー)はただ一つ」
と言う考え方があります。
全員が孤立した場合は全てのノードがノードマジョティーでなくなりますが
これは致し方ない。
0416デフォルトの名無しさん
2014/12/31(水) 12:33:06.40ID:3wvmlGUB切断したら無効試合とすれば矛盾は起きませんが、自分に都合の悪い戦局となった時にLANを切断するチートまがいができてしまいます。
0417デフォルトの名無しさん
2014/12/31(水) 12:48:57.94ID:Imw1KDaA0418デフォルトの名無しさん
2014/12/31(水) 12:50:47.43ID:y3Bru/20サーバなしでランキングなんかできん
0419デフォルトの名無しさん
2014/12/31(水) 12:51:42.38ID:3wvmlGUBノードマジョリティーのことですか? 調べてみましたがよくわかりませんでした。。。
もう少し詳しくお願いできますか?
よく考えたらLAN対戦でルーターに障害が起きた場合はどれが切断したとは言えないですね。
LAN対戦とネット経由での対戦で別のモードにしますか。。。
LAN対戦はおそらく知り合いに(少なくとも近場に)対戦相手がいることになるのでペナルティーは勝手にやってもらうとして、
インターネットを経由した遠距離での対戦の場合のみ障害判定をするとします。
つまりインターネットにつながっているかどうかのみわかればよさそうです。
そうすると>>414さんの方法も条件には合いそうですね。あまりスマートとは思えませんが。。
要点がまとまっていなくてすみません。。。
0420デフォルトの名無しさん
2014/12/31(水) 12:52:31.77ID:zCewkils自分はネットに繋がってるから相手が切ったように見せかけられるだろ?
0421デフォルトの名無しさん
2014/12/31(水) 12:56:13.49ID:3wvmlGUB全プレイヤーのランキングではなく、小規模な対戦の中での順位づけです。
あとサーバーがないといっても自由にプログラムを動かすことができるようなサーバーがないだけで
レンタルサーバーでCGIを動かすぐらいはできます。まあそうするとなおのことチート対策は万全にする必要がありますが
0422デフォルトの名無しさん
2014/12/31(水) 13:12:00.44ID:3wvmlGUBまとまってないのでわからないところ、無理そうなところがあったらバンバン言ってください。
最終的にやりたいことは、対戦リストやIPアドレスから対戦相手を指定して行う小規模(多くみても20人程度)のオンライン対戦ゲームです。
ポイント制にして対戦の報酬として受け取ったポイントで対戦に参加したりレベルアップしたりします。
構造としてはこのブラウザゲームに似ています→http://kyucon.com/tank/
対戦リストはCGIで書き込まれたネット上のファイルから取得します。
試合を立ち上げた人がゲームからCGIを経由してネット上にIPや人数上限などを書き込み、
その情報から対戦リストを表示して、他のプレイヤーがアクセスします。
対戦が終わると、順位に応じたポイントが手に入ります。
0423デフォルトの名無しさん
2014/12/31(水) 13:17:42.65ID:3wvmlGUBネットを通じては、毎フレームごとに入力情報、数フレームごとに座標情報(近距離にいるプレイヤーほど高頻度で通信)、送信された時だけチャットデータ、同じく発生したときのみ退室連絡(あと必要なら切断情報も)です
0424デフォルトの名無しさん
2014/12/31(水) 13:23:39.26ID:Imw1KDaA0425デフォルトの名無しさん
2014/12/31(水) 13:34:05.76ID:3wvmlGUB出直してきます。
まあ囲碁なら時間が切れて勝つことになるけれども
ゲームルールの方で対処してはいかが?
0427デフォルトの名無しさん
2014/12/31(水) 14:19:33.15ID:oAGy3gWf0428デフォルトの名無しさん
2014/12/31(水) 14:34:28.85ID:oy55ZnpW報酬は対局中の発声権(チャットの文字数)とか本筋に作用していいなら消費型の運パラとか
0429デフォルトの名無しさん
2014/12/31(水) 14:45:55.07ID:oAGy3gWf上手いこと運営側で対処したら出来たようだが。
当初から知られてたセキュリティ・ホールだったようだが。
0430デフォルトの名無しさん
2014/12/31(水) 15:00:49.66ID:oAGy3gWfビットコイン本体で改善されたか調べようとしたがわからん。
マウントゴックスは、顧客から送信に失敗したので再送して下さいという
シグナルが出ると自動で再送して、何度も送金してたのに放置してたらしい。
0431デフォルトの名無しさん
2014/12/31(水) 15:00:55.10ID:oy55ZnpWが。
が。
0432デフォルトの名無しさん
2014/12/31(水) 15:41:44.30ID:oAGy3gWfhttp://coinchannel.blog.jp/archives/3363097.html
Bitcoinウォレットを実装する - ビットコインの仕組み
http://bitcoin.peryaudo.org/implement.html
トランザクション展性とは - ビットコインの仕組み
http://bitcoin.peryaudo.org/malleability.html
mt.Goxの攻撃につかわれたTransaction malleability とはどういうものか?
http://nomad-ken.com/2945
0433デフォルトの名無しさん
2014/12/31(水) 17:17:57.18ID:sgzK7Ywh0434デフォルトの名無しさん
2014/12/31(水) 17:23:12.74ID:dkqWrKiB0435デフォルトの名無しさん
2014/12/31(水) 22:37:12.37ID:1CgnRKKQint*& foo()
{
static int bar;
return &bar;
}
ではなぜダメなの?
0436デフォルトの名無しさん
2014/12/31(水) 23:04:04.46ID:oy55ZnpW0437デフォルトの名無しさん
2014/12/31(水) 23:08:37.04ID:6ZI7gUY1そりゃ参照先の変数を確保してないからね。
int *& foo()
{
static int bar;
static int * p_int = &bar;
return p_int;
}
でもやりたかったのは
int *foo() {
static int bar;
return &bar;
}
int &foo() {
static int bar;
return bar;
}
じゃないのか?
0438デフォルトの名無しさん
2014/12/31(水) 23:54:35.55ID:1CgnRKKQご丁寧に解説して頂いて、ありがとうございます。
0439デフォルトの名無しさん
2015/01/01(木) 09:52:57.50ID:kIsn05xGunsigned char配列に変換したいのですが、ググッても良く分りません。
お勧めの変換方法を教えて下さい。
0440デフォルトの名無しさん
2015/01/01(木) 10:48:31.69ID:uA7/S4XlL"あいう"
これをunsigned char[] にしたときに
どのような結果を期待しているのか述べたまへ
0441デフォルトの名無しさん
2015/01/01(木) 10:51:32.08ID:kIsn05xG"あいう"
だと全部で6バイトだと思うので、その6バイトの値を
unsigned char[] 配列に入れたいのですが。
メモリ上のバイナリイメージそのままで良ければ、
unsigned char * でキャストするとか
0443デフォルトの名無しさん
2015/01/01(木) 12:21:37.37ID:UpaUaorn0444デフォルトの名無しさん
2015/01/01(木) 12:38:50.15ID:kIsn05xGキャストで行けました。
0445デフォルトの名無しさん
2015/01/01(木) 15:38:09.31ID:3u4q8tXn0446デフォルトの名無しさん
2015/01/01(木) 15:44:01.88ID:kIsn05xG終端の\0は必要ないので"あいう"の例なら、6バイトの配列に入れています。
0447デフォルトの名無しさん
2015/01/01(木) 15:48:59.41ID:kIsn05xGvoid func1(){
try{
func2();
}catch(...){
}
}
のようにしておけば、func2でどんな例外が起こっても、必ずcatchできますか?
ちょっと試したらcatch出来ずに異常終了する場合があるのですが、何か設定など必要ですか?
0448デフォルトの名無しさん
2015/01/01(木) 16:43:38.31ID:BK9p898t> catch出来ずに異常終了する場合
ヌルポインターアクセスとかは捉えられないよ
捉えたいなら、構造化例外で
0449デフォルトの名無しさん
2015/01/01(木) 17:30:54.60ID:pWC4yf5KC++言語の規定の範囲内のことであればcatchできます
未定義動作のコードがあれば何が起きても文句は言えません。
0450デフォルトの名無しさん
2015/01/01(木) 17:55:04.53ID:3u4q8tXn構造化例外を C++例外に乗せる コンパイラオプションの設定があったような C++ の項かのう
0451デフォルトの名無しさん
2015/01/01(木) 18:24:12.10ID:kIsn05xG__try {
}
__except(EXCEPTION_EXECUTE_HANDLER) {
}
に変えてみたら
error C2712: オブジェクト アンワインディングが必要な関数内で __try を使用できません。
っていうのが出ます。エラーメッセージの意味が、ググッても良く分らないのですが、何ですかこれは?
0452デフォルトの名無しさん
2015/01/01(木) 20:46:05.98ID:kIsn05xGダメだこんなの。
0453デフォルトの名無しさん
2015/01/01(木) 21:22:46.45ID:yTun5dKq0454デフォルトの名無しさん
2015/01/01(木) 22:35:18.02ID:cBeecbtC>異常終了する場合があるのですが、何か設定など必要ですか
異常終了するのはバグが有るからです。
設定の問題じゃなくてバグを直してください。
0455デフォルトの名無しさん
2015/01/02(金) 00:38:29.15ID:HVPQQAO2aaa(Function& f);
なら
Function func;
aaa(func);
でいいんでしょうけど、
aaa(Function&& f);
ってどういう風に呼び出されるのを期待しているのでしょうか?
0456デフォルトの名無しさん
2015/01/02(金) 02:36:25.06ID:hWXODlaZaaa(Function&& f);
Function bbb();
aaa(bbb());
っていう風に呼び出されるのを期待している
bbb()の戻り値は一時オブジェクトなので通常の参照は取れないが右辺値参照は取れる
ぶっちゃけムーブコンストラクタやムーブ代入演算子を実装するためのもの
0457デフォルトの名無しさん
2015/01/02(金) 06:07:06.63ID:/jUPfUiG質問を読めよ
『stdライブラリで使われている &&って』
0458デフォルトの名無しさん
2015/01/02(金) 06:19:11.16ID:7UbCEqjn456と別人だけど何を指摘したいのか解らんよ。
456の回答で違和感ない。
もっと具体的に言わないと伝わらないよ。
0459デフォルトの名無しさん
2015/01/02(金) 07:01:46.46ID:KJ45sHVc↓
>通常の参照は取れないが右辺値参照は取れる
>ムーブコンストラクタやムーブ代入演算子を実装するためのもの
通常の参照は取れるし、ムーブコンストラクターを実装するためのものでもない
0460デフォルトの名無しさん
2015/01/02(金) 08:35:27.08ID:7UbCEqjn通常の参照(lvalue reference)が取れるのはtemplate<typename Tp>void f(Tp&& v){}
こういう風に定義されてるときだけ(&&が無視されるから)だろ?
std::vectorのpush_backみたいなvoid f(T&& v){}
こういうのだとそっちで取れない
元の質問がC++11で追加されたvoid push_back(T&& value);みたいなのを言ってるなら456で正しい。例の渡し方おかしいし、moveコンストラクタやmove演算子を実装するものじゃなくてそれらを使用するためのものだけど。
あれ?つまり正しくない所の方が多いな。
0461456
2015/01/02(金) 11:13:18.68ID:hWXODlaZ0462デフォルトの名無しさん
2015/01/02(金) 11:26:19.31ID:7UbCEqjn> aaa(Function&& f);
ってあったら呼び方は
aaa(Function());
だろ?
もしくは
Function a;
aaa(std::move(a));
0463デフォルトの名無しさん
2015/01/02(金) 12:15:58.38ID:rZN9ITIb他の関数の戻り値を、変数に格納せずにダイレクトに他の関数の引数にした場合
ムーブしてくれるものだと勝手に思っていたが・・・
0464デフォルトの名無しさん
2015/01/02(金) 12:25:04.99ID:rZN9ITIb不足のありそうなテストコードだけど
関数の戻り値を直接でも右辺値参照のオーバーロードが動くみたいよ
こういう話じゃなかったらスマン
0465デフォルトの名無しさん
2015/01/02(金) 12:27:37.47ID:YebgAn5kint gcd(int a,int b){
if(a%b==0)return b;
else gcd(b,a%b);
}
aとbの大小判定をしなくても
a%bがaになり自動で入れ替わり正常に機能する理由が解らないです。
先頭に大小判定を入れたほうが正しいんでしょうか?
0466デフォルトの名無しさん
2015/01/02(金) 12:43:51.36ID:rZN9ITIbもし a < b だった時には、 a%b の値( a を b で割った余り)は a そのものになるから
再帰呼び出し gcd(b, a%b) の部分は実質的に gcd(b, a) になって
2段目に呼び出された gcd() の中では、a(元b) < b(元a) になる。
大小判定を入れても動作に問題は無いけど、せいぜい再帰の段数が1個減るぐらいで
入れても殆ど無意味だと思う・・・
0467デフォルトの名無しさん
2015/01/02(金) 12:47:15.45ID:rZN9ITIb○ 2段目に呼び出された gcd() の中では、a(元b) > b(元a) になる。
だった。
0468デフォルトの名無しさん
2015/01/02(金) 12:55:26.80ID:YebgAn5ka<b時のa%bがaというのは仕様なんですね。
0469デフォルトの名無しさん
2015/01/02(金) 13:39:42.63ID:gt3qlz2l仕様というか算数ちゃうか…
a=2 b=3に当てはめてみなさい
0470デフォルトの名無しさん
2015/01/02(金) 13:41:19.95ID:tLxmF+4Ea < b ならば a は b で割れるはずもなく、全て余りになる という自明の話
(負の数の時の剰余取り扱いについては仕様になるだろうが)
0471デフォルトの名無しさん
2015/01/02(金) 15:59:58.69ID:gjfA+vABaaa ( [](){} );
0472デフォルトの名無しさん
2015/01/03(土) 00:28:44.48ID:MxPJttgJあっているよ
Function func();
はFunction型の値を返す関数の宣言だもの。
0473デフォルトの名無しさん
2015/01/03(土) 02:44:39.42ID:abdcPBX0>>460がヒント出してるだろ。二種類の目的で使われている。
const T &とT &&がオーバーロードされてるような場合は>>456の通りだが
template<typename Tp>void f(Tp&& v);
のように使われている場合は
完全転送(perfect forwarding)を目的としている。
0474デフォルトの名無しさん
2015/01/03(土) 03:25:47.66ID:ekZNF4RPtemplate<typename Tp>void f(Tp&& v);
はどういう風に使うの?
A a;
f(std::move(a));
でいいの?
0475デフォルトの名無しさん
2015/01/03(土) 04:14:43.85ID:Cj8CgFQv0476デフォルトの名無しさん
2015/01/03(土) 06:23:21.21ID:S9XSxOyhそいつはどうとでも使える。
標準ライブラリならmoveが許されるrvalueを渡されたらmoveするし、そうでないなら普通のコピーする。
moveして欲しいならあんたが書いてるようにstd::move()したものを渡してやればいい。
0477デフォルトの名無しさん
2015/01/03(土) 11:48:55.13ID:sytQLtmt関数テンプレートで && の場合は、非const参照のオーバーロードが考えられる
理由は、右辺値も左辺値も受け取れるようにしたいからと。
こういうのさあ…、初心者に分かりやすい一覧ないの。ちゃんと理由が書いてある
0478デフォルトの名無しさん
2015/01/03(土) 12:00:17.75ID:y2ZzUwkx0479デフォルトの名無しさん
2015/01/03(土) 12:05:14.44ID:1H0KnqhC0480デフォルトの名無しさん
2015/01/03(土) 12:53:25.47ID:1H0KnqhCtemplate展開後のコードを見れたら良いんだがなあ
0481デフォルトの名無しさん
2015/01/03(土) 13:20:27.45ID:zznC6x/dif( 2 <= x < 5 ) みたいな書き方出来ませんか?
0482デフォルトの名無しさん
2015/01/03(土) 13:20:39.67ID:Cj8CgFQv0483デフォルトの名無しさん
2015/01/03(土) 13:22:59.20ID:XgnEofgFif( 2 <= x && x < 5 )
で我慢しろよ
0484デフォルトの名無しさん
2015/01/03(土) 13:48:03.41ID:zznC6x/dc++の高度な機能を駆使して
どうにか出来ませんか?
0486デフォルトの名無しさん
2015/01/03(土) 13:56:12.26ID:Cj8CgFQv0487デフォルトの名無しさん
2015/01/03(土) 14:28:14.45ID:zznC6x/d#define IF(xmin, a1, x, a2 , xmax) if(((xmin) a1 (x)) && ((x) a2 (xmax)))
とすると
IF(2, <= , x, <, 5)
みたいに行けたのですが、問題ありますか?
0488デフォルトの名無しさん
2015/01/03(土) 14:33:41.24ID:fEHuClGw0489デフォルトの名無しさん
2015/01/03(土) 15:06:03.45ID:rT9ShsFT0490デフォルトの名無しさん
2015/01/03(土) 16:43:25.63ID:8BccSE7Hよし教えてやろう。
1.「完全転送」をしたい時はtemplate<T> auto f(T&&);の形だ。
たいていは可変個引数になる。
2.それ以外は普通に&と&&を使い分ける。
完全転送はテンプレートの展開後のコードが無かったかのように
直接渡したい場合だ。例えば
vector<A> v; v.emplace_back(…★…); は
追加するメモリ位置に配置newで
new (追加位置) A{…★…};
とするのが目的で、本当はAのコンストラクターに値を渡すために
emplace_backの関数呼び出しすらしたくない。だからT&&で完全転送させる。
0491デフォルトの名無しさん
2015/01/03(土) 19:32:38.25ID:y1GBLXopbool between(T lower, T const &v, T upper);
between<std::less_equal, std::less>(2, x, 5);
0492デフォルトの名無しさん
2015/01/03(土) 23:50:28.29ID:fdcOcyfustatic double d = 100.0;
return d;
}
このfはマルチスレッドで呼んでも安全ですか?
0494デフォルトの名無しさん
2015/01/03(土) 23:57:32.86ID:htJS8xrtC++11 以降なら問題ない。 6.7 [stmt.dcl] p4
0495デフォルトの名無しさん
2015/01/04(日) 09:45:37.44ID:EjbbMTMUC++11 以前だとなんか問題あったっけ?
0496デフォルトの名無しさん
2015/01/04(日) 09:55:29.27ID:k0mCYKYOスレッド2が初期化完了と思って初期化途中の値を返すと困る
あと二重初期化も
0497デフォルトの名無しさん
2015/01/04(日) 10:02:17.88ID:SXr0Npw70498デフォルトの名無しさん
2015/01/04(日) 10:20:33.94ID:+b+eo/V4doubleは古いCPUで32bit転送すると問題起きそう
あと並列処理で変更する可能性あるならvolatile
変更するつもりないなら関数も一緒にconstexpr
0499デフォルトの名無しさん
2015/01/04(日) 10:35:12.11ID:EjbbMTMUstatic 変数って関数に入る度に代入しないでしょ?
0500デフォルトの名無しさん
2015/01/04(日) 10:41:02.17ID:nrY/dO4R0501デフォルトの名無しさん
2015/01/04(日) 11:07:06.00ID:EjbbMTMUどう言うこと?
d への代入/参照以外に競合しそうにないんだけど...
0502デフォルトの名無しさん
2015/01/04(日) 11:09:39.19ID:nrY/dO4R0503デフォルトの名無しさん
2015/01/04(日) 11:10:58.64ID:lrHbTIEsマルチスレッド対応の排他処理が必要ということか
0504デフォルトの名無しさん
2015/01/04(日) 11:17:32.01ID:EjbbMTMUどうやってるの?
0505デフォルトの名無しさん
2015/01/04(日) 11:21:19.14ID:nrY/dO4R0506デフォルトの名無しさん
2015/01/04(日) 12:14:18.84ID:SXr0Npw7アトミックであることが保証されていないとして、同じ定数の代入で問題出る?
この場合、二重初期化にはなるかもしれないけど結果は変わらないように思うんだが。
0507デフォルトの名無しさん
2015/01/04(日) 12:25:03.10ID:EjbbMTMUもう少し面白いレスを期待したんだが w
0508デフォルトの名無しさん
2015/01/04(日) 12:45:59.61ID:oiumm62hつい最近、関数内static変数の初期化タイミングについて調べたんだが
VS2013はこうだったよ
静的変数領域に初期化済みフラグ変数が作られてて
それが0だったら初期化とatexitにデストラクタを登録して、フラグを1にしてた
0509デフォルトの名無しさん
2015/01/04(日) 12:48:22.18ID:XPPzqmKUあるスレッドが書いた結果を別のスレッドが読めることは保証されていない。
例えばスレッド1が書いた結果がCPU1のキャッシュに書かれ、
スレッド2がCPU2のキャッシュから違う値を読み出す可能性もある。
0510デフォルトの名無しさん
2015/01/04(日) 13:13:36.30ID:dRV17Ydgstd::atomicかvolatileのどちらを使えばいい?
0511デフォルトの名無しさん
2015/01/04(日) 13:26:06.42ID:+b+eo/V40512デフォルトの名無しさん
2015/01/04(日) 13:36:28.08ID:x5miDuez「俺のスタンダードはこうだぜ」
でしかないのだが
0513デフォルトの名無しさん
2015/01/04(日) 13:39:19.81ID:x5miDuez0514デフォルトの名無しさん
2015/01/04(日) 16:15:22.67ID:VX3mvVTyでも初期化完了してから代入が無いうちに読めば初期値が読み出せることは
保証されてる (C++11 1.10 [intro.multithread] p3) から、問題ないよね?
0515デフォルトの名無しさん
2015/01/04(日) 16:18:45.84ID:VX3mvVTy一般的には atomic を使わないと複数スレッドから同じ変数の値取得・値設定を行った場合の
結果は保証されない。
厳密には未定義動作の範囲になるけど int なら volatile でなんとなく動いちゃう環境も多そうで、
「いい」の基準にもよってはそっちかもしれない。
0516デフォルトの名無しさん
2015/01/04(日) 16:34:48.86ID:XPPzqmKUむむ、確かにそうなるようように読めるな。
0517デフォルトの名無しさん
2015/01/04(日) 16:53:44.13ID:VX3mvVTyこの「待つ」の意味が曖昧だという issue はあった。
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1784
でも >514 の規定もあるんで、これが問題になるのはコンストラクタのあるクラス型の
初期化(に伴う代入)に限られるかな。
0518デフォルトの名無しさん
2015/01/04(日) 20:55:28.17ID:xMUR5ASN{
return Foo();
}
int main( int argc, char *argv[] )
{
Foo foo = test();
return 0;
}
上記コードでfooはコピーコンストラクタで初期化されるのですか?
operator= ですか?
どちらも呼ばれていないようなんです。
0519デフォルトの名無しさん
2015/01/04(日) 20:57:08.99ID:AMdUkF9B0520デフォルトの名無しさん
2015/01/04(日) 20:57:29.24ID:nrY/dO4R0521デフォルトの名無しさん
2015/01/04(日) 21:21:20.32ID:j/60c7YT釣りだと思うなら、書き込まなければよくね?
そうじゃないかもしれないじゃん
0522デフォルトの名無しさん
2015/01/04(日) 21:32:17.55ID:oRJJvZ0W・operator=ではありません
・Fooにムーブコンストラクターが有る場合はムーブコンストラクターで初期化されます
・Fooにムーブコンストラクターが無い場合はコピーコンストラクタで初期化されます
・でもコンパイラーの気分次第でどちらも呼ばれないことがあります
0523デフォルトの名無しさん
2015/01/04(日) 23:54:27.39ID:UYKSJFA2test関数内の『Foo()』よって
呼び出し元のfooの構築予定位置に直接構築されることがあります。
{
Foo foo=test();
…
}
Foo test() {
return Foo(…);
}
↓ コンパイラーによる実装
{
char foo_buf[sizeof(Foo)];//メモリだけ確保
Foo &foo = *(Foo *)foo_buf;
test(&foo);//testの内で構築
…
foo.~Foo();
}
void test(Foo *p_ret) {
new(p_ret) Foo(…);//p_retの位置に構築
}
0524デフォルトの名無しさん
2015/01/05(月) 00:42:51.59ID:Z4kH2usDありがとうございます。
そんなコードがさっと書けるなんて私のレベルからみたらハッカーレベル
0525デフォルトの名無しさん
2015/01/05(月) 01:03:12.80ID:HQBfrJ95X &x = ...; と &x の「&」が
こうも違う意味で使用されるとは
0526デフォルトの名無しさん
2015/01/05(月) 02:56:27.42ID:J4h7NkXr元々ポインタの宣言とアドレスからのデリファレンスに同じ*を使ってたのがC言語だし、今更かと
0527デフォルトの名無しさん
2015/01/05(月) 03:00:45.27ID:joXgI9aCfwdヘッダ用意したり、前方宣言にしたり、pImplイディオム使ったり
0528デフォルトの名無しさん
2015/01/05(月) 07:20:55.38ID:aOzM7H2S意味ありますが、&は二個までしか
使わないんですか?
&&&みたいなのが使われる事は
有りますか?
0529デフォルトの名無しさん
2015/01/05(月) 08:41:06.96ID:yIG755cC0530デフォルトの名無しさん
2015/01/05(月) 11:38:38.41ID:6dicJpBg参照型の&とアドレス取得の&は何の関係もない
0531デフォルトの名無しさん
2015/01/05(月) 11:46:40.87ID:8wARtoFz0532デフォルトの名無しさん
2015/01/05(月) 12:32:35.04ID:dcVDuqIPポインタでなくアドレスの参照なんだけどな
0533デフォルトの名無しさん
2015/01/05(月) 17:45:14.95ID:c8QM0CpZ型情報の無いものをデリファレンスすることは不可能
0534デフォルトの名無しさん
2015/01/05(月) 18:07:38.46ID:bnx5ljY/0535デフォルトの名無しさん
2015/01/05(月) 19:15:34.71ID:o8IVACxb0536デフォルトの名無しさん
2015/01/05(月) 19:45:37.08ID:eW15SvL+0537デフォルトの名無しさん
2015/01/05(月) 20:37:22.50ID:dcVDuqIPプリプロセッサの実装がかなりカオスになるかと…
現行仕様なら文字リテラルや文字列リテラルだけチェックすりゃいいと思う
てか#が演算子だと #define はプリプロセッサ指令なのか?
それとも「#演算子」+「識別子define」なのか?
0538デフォルトの名無しさん
2015/01/05(月) 20:43:02.08ID:eW15SvL+0539デフォルトの名無しさん
2015/01/05(月) 21:04:03.86ID:k+i5FUHX単独はともかく複合は何とかなるだろ
それより$はどこいったんだ?
0540デフォルトの名無しさん
2015/01/05(月) 21:13:17.40ID:OqXHqOuF&もC言語の頃から論理演算やビット演算に使われてるしなー
0541デフォルトの名無しさん
2015/01/05(月) 21:30:30.66ID:JFeb/Dkj0542デフォルトの名無しさん
2015/01/05(月) 21:32:01.97ID:8OfiKVjhfor (;; i++, j++)
これはちょっと捨てがたい
0543デフォルトの名無しさん
2015/01/05(月) 23:13:20.12ID:6ZakQqWPhttp://peace.2ch.net/test/read.cgi/tech/1313183984/594
カンマ演算子がないと、三項演算子をフルに活用できない
0544デフォルトの名無しさん
2015/01/05(月) 23:13:47.04ID:F38A7Xb0func(value1, value2, ...)
どうすんの区切り
0545デフォルトの名無しさん
2015/01/05(月) 23:33:30.48ID:FJgPpSw6>>544
>>544
0546デフォルトの名無しさん
2015/01/06(火) 00:40:13.69ID:rU9M9NSlカンマ演算子はどーでもいい
0547デフォルトの名無しさん
2015/01/06(火) 00:42:28.84ID:VMQ4U3C+0548デフォルトの名無しさん
2015/01/06(火) 05:33:38.06ID:3D6Su9d8それはカンマ演算子じゃない
>>547
三項演算子は Lisp 由来とはいいにくい、とはC/C++関連スレではよく言われるところ
0549デフォルトの名無しさん
2015/01/06(火) 09:51:10.70ID:2O/Tv4gz適当に両方を使うので、ソースの中にsizeやlengthが混じっています。
上級者の人は、どちらか一方しか使わないと決めていますか?
0550デフォルトの名無しさん
2015/01/06(火) 10:20:23.02ID:1VvNcLrksize_t size() const noexcept;
Return length of string
Returns the length of the string, in terms of bytes.
This is the number of actual bytes that conform the contents of the string,
which is not necessarily equal to its storage capacity.
Note that string objects handle bytes without knowledge of the encoding that may eventually be used to encode the characters it contains.
Therefore, the value returned may not correspond to the actual number of encoded characters in sequences of multi-byte or variable-length characters (such as UTF-8).
Both string::size and string::length are synonyms and return the same value.
0551デフォルトの名無しさん
2015/01/06(火) 11:07:07.91ID:VMQ4U3C+Short-circuit evaluationがMcCarthy evaluationという別名を持ってる事を知らないアホウ。
0552デフォルトの名無しさん
2015/01/06(火) 12:00:09.24ID:hvbSszuSお前の脳内定義を長々と書かれても…
0553デフォルトの名無しさん
2015/01/06(火) 14:00:54.62ID:MIXF2/W4機能させる条件として「shared_ptrで管理されている状態でなければならない」みたいな説明をされていたのですが
使い方としては(Tはenable_shared_from_thisをpublic継承しているものとして)
T* ptr = new T(...);
shared_ptr<T> sp{ ptr };
// またはmake_shared使って直接shared_ptr<T>で作るとか
ptr->shared_from_thisを使う操作();
はOKで
T* ptr = new T(...);
ptr->shared_from_thisを使う操作();
shared_ptr<T> sp{ ptr };
ではダメ、という認識で合っていますか?
0554デフォルトの名無しさん
2015/01/06(火) 14:37:50.31ID:IOY8OATqちなみに用途としては、メンバメソッド内部で自身のshared_ptr要求してる時に型解決するって単純なのから、
非同期処理時にshared_ptrを取得して、処理終了までインスタンスが残るのを保証したりとか
if (auto p = t->shared_from_this()) {
p->asyncHoge();
}
0555デフォルトの名無しさん
2015/01/06(火) 16:22:19.21ID:MIXF2/W4不安点が解消されたので、ようやく手を出せそうです・・・
0556デフォルトの名無しさん
2015/01/06(火) 21:02:36.00ID:3D6Su9d8その短絡評価が、三項演算子やコンマ演算子とどう関係するのか?
>>547
>Lispも知らないアホウが三項演算子とか
え?三項演算子と Lisp になんか関係があるのか?
http://peace.2ch.net/test/read.cgi/tech/1408017352/46
>カンマ演算子や3項演算子もAlgol 68が元祖でそれから受け継いだもの。
http://peace.2ch.net/test/read.cgi/tech/1408017352/49
>McCarthyはAlgol 68には全くタッチしていない。
>そもそもAlgol 60の設計をやった連中はWijngaardenのチームが出してきたAlgol 68の提案を見て
>ほぼ例外なくあきれ返って愛想をつかしたのだから。
信者はこれだから‥
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3AScheme%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%83%AC%E3%83%99%E3%83%AB10
>カッコだらけですごくわかりにくい言語があることは知っているが、 最強とか主張する信者がいるらしいのでなるべく関わらないようにしている。
0557デフォルトの名無しさん
2015/01/06(火) 21:40:01.21ID:VQBi/vCZ0558デフォルトの名無しさん
2015/01/07(水) 07:16:08.23ID:whm40mKL猫でもわかるWindowsプログラミング以外にいい書籍ないですかね?
0559デフォルトの名無しさん
2015/01/07(水) 08:07:54.41ID:F9tFXwtq>その短絡評価が、三項演算子やコンマ演算子とどう関係するのか?
>>Lispも知らないアホウが三項演算子とか
>え?三項演算子と Lisp になんか関係があるのか?
lispをしらないアホウがドヤ顔でかいた「三項演算子をフルに活用する」から抜粋。
>>543
>http://peace.2ch.net/test/read.cgi/tech/1313183984/594
>カンマ演算子がないと、三項演算子をフルに活用できない
(k == M - 1) ? putchar('\n') : 0,g(s, r, r),
Short-circuit evaluationなしで、意図した通りに動くとでも?
0560デフォルトの名無しさん
2015/01/07(水) 08:38:54.85ID:yOI2m8msその引用したコードのどこに短絡評価が使われているのか?
だいたい切り出し箇所を間違えている、コンマ演算子は優先順位は最低だ
0, に引き続いて g(n, s, r, r) が常に実行されるわけじゃない
(s[r] == 0) ? ( printf("%-3d ", r),
(k == M - 1) ? putchar('\n') : 0,
g(n, s, r, r),
h(n, s, r + 1, (k == M - 1) ? 0 : k + 1) )
そのコードはちゃんと動くからしっかり読め馬鹿?
http://ideone.com/PF7IFU
0561デフォルトの名無しさん
2015/01/07(水) 11:12:37.12ID:R14m8Fcb#define VERSION_XXX
...
#ifdef VERSION_XXX
...
#endif
みたいな方法でコード区切って、VERSION_XXXがdefineされててもされてなくても
コンパイルされるコードを書いているのですが
間違って
#ifdef VRESION_XXX // RとEが逆!
みたいな区切りをしてしまってもコンパイルが通ってしまいます
なんらか誤字を検知するいい方法ってありませんか?
0562デフォルトの名無しさん
2015/01/07(水) 11:13:34.05ID:J9Js0gVS0563デフォルトの名無しさん
2015/01/07(水) 11:18:37.62ID:R14m8Fcbインテリセンスが聞くとコピペより楽だから手打ちがクセになっちゃってますけど
心がけて参ります
0564デフォルトの名無しさん
2015/01/07(水) 11:59:36.15ID:R65SynMt0565デフォルトの名無しさん
2015/01/07(水) 12:51:46.31ID:qRf9hh7Iそうでなければコンパイル後の実行テストで発見するしかないかな
そこだけ丸々抜けてるんだから実行時には必ず見つけられないと可笑しい
0566デフォルトの名無しさん
2015/01/07(水) 20:46:20.47ID:ArlGb+1Q//
#else
#error "VERSION_XXX is Not defined."
#endif
とでもしとけばいいんでないの?
0567デフォルトの名無しさん
2015/01/07(水) 21:42:15.24ID:MxHTewdX#elif VER==2
#else
# error
#endif
0568デフォルトの名無しさん
2015/01/07(水) 21:46:13.11ID:DXg8c96r0569デフォルトの名無しさん
2015/01/07(水) 22:29:52.94ID:nd/axr2Uなんのために #ifdef 使ってるんだよ w
0570デフォルトの名無しさん
2015/01/07(水) 22:47:59.80ID:F9tFXwtqhttp://peace.2ch.net/test/read.cgi/tech/1408017352/46
>カンマ演算子や3項演算子もAlgol 68が元祖でそれから受け継いだもの。
こんな与太話をうのみにしてドヤ顔で貼りつけるアホウには理解できないだろうが、
特別に教えてやる。
> その引用したコードのどこに短絡評価が使われているのか?
short-circuit evaluationはlazy evaluationの特殊形。
Cのconditional operatorもshort-circuit evaluationに分類される。
0571デフォルトの名無しさん
2015/01/07(水) 23:47:54.51ID:BnVzqaG6その話はもう終わりましたよ
0572デフォルトの名無しさん
2015/01/08(木) 02:04:51.23ID:dZQr24t7独自研究?
要出展。
0573デフォルトの名無しさん
2015/01/08(木) 02:59:34.28ID:dQf1lgekand や or がないのに短絡評価とはこれいかに?
お前の好きな McCarthy evaluation に言及している http://en.wikipedia.org/wiki/Short-circuit_evaluation では、
>when the first argument of the AND function evaluates to false, (以下略)
>when the first argument of the OR function evaluates to true,(以下略)
conditinal operator (三項演算子)の話は(全然ないわけではないが)関係ないね。
分類?興味はないから勝手に分類すればぁ?
#専用ブラウザを締め出しにかかったのか?
0574デフォルトの名無しさん
2015/01/08(木) 09:31:28.52ID:97n2OZ0xどっちの話だ? 前者ならBCPLで検索してみな。
後者ならhttp://en.wikibooks.org/wiki/Introduction_to_Programming_Languages/Evaluation_Strategiesあたり。
Cのlogical operatorもconditional operatorもLazy Evaluation/Call by Needに分類される。(とは明記されてはいないが、本質的に同じもの)
0575デフォルトの名無しさん
2015/01/08(木) 09:46:23.05ID:6nWj+k4ostatic_cast
const_cast
reinterpret_cast
などの使い方が良く分らないので、キャストする時は (char *) みたいにCのやり方でキャストをしまくっている
のですが、何か問題ありますか?VisualStudio2013 C++です
0576デフォルトの名無しさん
2015/01/08(木) 09:47:40.46ID:97n2OZ0x予想通りアホウには理解できなかったか。
お前の「三項演算子をフルに活用した」コードはうんこ。グロ。
肥溜から汲み出して陳列するな。
中学生でも「FPの真似事してみました」くらいの事はできるぞ。
0577デフォルトの名無しさん
2015/01/08(木) 09:50:43.80ID:Kii/PXQdとしか言いようがない
0578デフォルトの名無しさん
2015/01/08(木) 10:09:22.36ID:dZQr24t7本質的に同じものと明記しているURLが欲しい。
0579デフォルトの名無しさん
2015/01/08(木) 19:04:10.00ID:AQCXdgrRクロスキャストが正しい結果にならなかったような
ついでにそれだとdynamic_castのチェック機構が働かない
0580デフォルトの名無しさん
2015/01/08(木) 20:31:44.57ID:dQf1lgekオペレータ op による
(op A, B, ....)
の多項演算において、A を評価した結果によっては B 以降を評価しない、というのはよくわかる、しかし
if A then B else C
で当たり前のことだが
B が評価されるときは C は評価されない
C が評価されるときは B は評価されない
それをもってして、
「"if A then B else C" は lazy だ、short-circuit だ」と主張しているようにしかみえないが、そんな当たり前なことを主張したところで誰得?
それとも分類したつもりで納得したつもりな、頭が幸せな人なの?
>お前の「三項演算子をフルに活用した」コードはうんこ。グロ。
光栄だね、>>543 は狙って書いたからね、お気に召されたようでなによりだ
0581デフォルトの名無しさん
2015/01/08(木) 22:24:36.91ID:xIJvBvn3お前、スレを荒らすときはちゃんとクソコテ付けろよ
NGしにくいだろ
0582デフォルトの名無しさん
2015/01/08(木) 22:58:17.62ID:97n2OZ0xLazyな言語で検索すれば沢山あるだろ。例えば
https://books.google.co.jp/books?id=nh0okI1a1sQC&pg=PA34
0583デフォルトの名無しさん
2015/01/08(木) 23:41:30.06ID:97n2OZ0xLazyな言語で検索すれば沢山あるだろ。例えば
https://books.google.co.jp/books?id=nh0okI1a1sQC&pg=PA34
0584デフォルトの名無しさん
2015/01/09(金) 01:31:08.80ID:S/l7jDeLif C then A else B / C : A ? B
に生来の自然な lazy 性があるというのだろう、その主張は認めよう
0585デフォルトの名無しさん
2015/01/09(金) 09:32:23.87ID:UAUytMwxconditional operatorをshort-circuit evaluationと呼んで良いかが争点だった。
二度と肥溜から汚物を汲み出して陳列するな。
0586デフォルトの名無しさん
2015/01/09(金) 12:33:23.34ID:S/l7jDeL私は汚物どころか、ふつくしくまとめたものだと考えているが‥あこがれの R
0587デフォルトの名無しさん
2015/01/09(金) 12:34:12.80ID:S/l7jDeL0588デフォルトの名無しさん
2015/01/10(土) 05:34:25.93ID:Ogdmrgtc0589デフォルトの名無しさん
2015/01/10(土) 10:34:36.82ID:e5lVGhD9ちょっと考えれば
c ? a : b == (c && a) || (!c && b)
である事は明白だけど、こういっても難癖つけるだろ。
0590デフォルトの名無しさん
2015/01/10(土) 11:59:14.45ID:gEQY0px80591デフォルトの名無しさん
2015/01/11(日) 05:24:44.01ID:6BuzDaMrちと考えるな
英語でもいいけど見出し付きPDFにしてくれないと読む気がしない
0592デフォルトの名無しさん
2015/01/11(日) 05:57:19.03ID:/K47z1BX間違ってね?
0593デフォルトの名無しさん
2015/01/11(日) 06:01:20.29ID:6BuzDaMrコイツはQですよ?
0594デフォルトの名無しさん
2015/01/11(日) 10:59:57.97ID:aK2tqeoS残念だがその等式は C に関しては成立しない
残念な点は2つ
1. 左辺は a, b のいずれかの値を返す、右辺は 0, 1 のどちらか
2. 左辺のCの評価は1回、右辺は場合によってはCが二回評価されることがある、Cが副作用をもっているとき、これは重大な相違|
0595デフォルトの名無しさん
2015/01/11(日) 11:37:10.14ID:gcpaqSvI0596デフォルトの名無しさん
2015/01/11(日) 12:03:32.28ID:3ahz/Tk90597デフォルトの名無しさん
2015/01/11(日) 13:36:50.98ID:09KNadFPC++を勉強中です
ruby では pp
JavaScript では JSON.stringify で
変数の情報を参照していました
C++でおなじように変数の子要素もまとめて出力するような機能はありますか
0598デフォルトの名無しさん
2015/01/11(日) 13:39:05.86ID:qXCt624L0599デフォルトの名無しさん
2015/01/11(日) 13:39:34.12ID:GCkLh1u2言語仕様にはありません
適当なライブラリを探してください
0600デフォルトの名無しさん
2015/01/11(日) 15:40:03.53ID:gcpaqSvI0601デフォルトの名無しさん
2015/01/11(日) 15:43:45.43ID:2uQnlC2Sモヒカン的な思想ですね
もう少し社会に適応した方がいいですよ
0602デフォルトの名無しさん
2015/01/11(日) 16:08:35.26ID:wfXxgM2Hしかし、下のようなソースではファイルが新規作成されてしまいます。
いくつもまずいところあるかもしれませんが、どこをどのように直せばよいか、あるいはどこのサイトをみればよいか教えてくださいませ。
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ofstream fout ;
char outfile[] = "workfile.bin";
int i1;
fout.open(outfile,ios::out|ios::binary|ios::ate ) ;
if (!fout){
cout << "workfile.binが開けないですいません";
}
short s1 ; //書き替え用2Byte
cout << "何番目(2byte単位)を書き替えますか"<<endl;
cin >> i1;
cout << "いくつに書き換えますか"<<endl;
cin >> s1;
fout.seekp ( (i1-1)*sizeof ( short ) );
fout.write( ( char * ) &s1, sizeof( short ) );
fout.close();
return 0;
}
0603デフォルトの名無しさん
2015/01/11(日) 18:54:32.65ID:lYBxwBISそうだな
まずiostreamという糞ライブラリを使うのを止めることをオススメする
0604デフォルトの名無しさん
2015/01/11(日) 18:54:33.69ID:FnSQDCUV0605デフォルトの名無しさん
2015/01/11(日) 18:57:04.53ID:3ahz/Tk9で、具体的なことはなにも書けないと w
0606602
2015/01/11(日) 19:17:36.28ID:4/5dMjSNはい、別途作成済のファイルです。
>603
iostreamは糞なんですか。もっといいのがあれば教えてくださいませ。
0607デフォルトの名無しさん
2015/01/11(日) 19:35:50.86ID:/SWGABMQ0608デフォルトの名無しさん
2015/01/11(日) 19:39:44.19ID:wJL8ZTbg0609デフォルトの名無しさん
2015/01/11(日) 19:51:26.95ID:FnSQDCUVコードよく見てなかったが>>607の通りだな。ios::outは既存のファイルがある場合は
それを削除して開くことになる。代わりのフラグを設定しる(ios::appか?)
0610602
2015/01/11(日) 21:24:36.19ID:4/5dMjSNfout.open(outfile,ios::in|ios::out|ios::binary ) ;
0611デフォルトの名無しさん
2015/01/14(水) 16:53:09.61ID:qg2WOmMy{
virtual void onNannka(Manager *pMngr) = 0;
}
みたいなコールバックの中でのみpMngrにアクセスを許したいんですがどうすればいいんですか?
0612デフォルトの名無しさん
2015/01/14(水) 17:11:20.90ID:bm2MApp40613デフォルトの名無しさん
2015/01/15(木) 20:42:13.86ID:lMW8kkLc}
みたいなループ変数や、
int array[10][20];
int x=2;
int y=6;
array[x][y] = 100;
みたいな配列のインデックスなどのちょっとした変数にintを良く使うのですが、
size_tを使うべきなのでしょうか?
特に64bitをターゲットにビルドする場合、intよりsize_tを使うほうが
実行速度が速くなったりしますか?Windowsです。
0614デフォルトの名無しさん
2015/01/15(木) 20:58:51.27ID:QsGAtWbUsize_tはlongだけど、このページ見るとどっちもバイト境界超えないから、どの環境でも変数のR/Wは同じ
http://ja.wikipedia.org/wiki/%E6%95%B4%E6%95%B0%E5%9E%8B
32bitOSでC#使うと速度差出るかも、
他にもLP64コンパイラで構造体メンバにsize_t使うとバイト境界超えちゃったりするかもね
0615デフォルトの名無しさん
2015/01/15(木) 21:09:47.58ID:lMW8kkLcレスありがとうございます。同じですか。
では質問を変えて、上級者の皆さんはintを使いますか?
size_tを使いますか?
0616デフォルトの名無しさん
2015/01/15(木) 21:17:13.33ID:YwRI9yA00617デフォルトの名無しさん
2015/01/15(木) 21:20:28.85ID:cnFFIXA8どうしてこう、息を吸って吐くように嘘が言えるのか
0618デフォルトの名無しさん
2015/01/15(木) 21:39:13.36ID:lMW8kkLcなるほど。今までintを良く使ってきたのですが、
vectorなどを使い始めて
for(int i=0;i<v.size();i++){}
とした場合や、文字列に対して
int len = strlen(str);
などで警告が出るので
for(size_t i=0;i<v.size();i++){}
size_t len = strlen(str);
のように、徐々にsize_tを使うようにして来ました。
なので世の中はどっちを使うのか主流なのかなと思いまして。。
0619デフォルトの名無しさん
2015/01/15(木) 23:00:29.34ID:QsGAtWbUすまん、処理系によるな、ヘッダ覗いて書きこんでた
0620デフォルトの名無しさん
2015/01/16(金) 01:03:17.27ID:Uo0Zlj+1unsigned(符号なし)は負にならない整数(0以上)
ただしunsignedは、オーバーフローせずに、wrap around する
例えば、byteなら0〜255だから、255の次は、0に戻る
0621デフォルトの名無しさん
2015/01/16(金) 01:20:11.72ID:zcVrzqx4range based for使おう
0622デフォルトの名無しさん
2015/01/16(金) 07:05:25.03ID:+KdRxbjWループインデックスの値が必要なケースについて訊いてるんだろ
そのくらい理解しろ
0623デフォルトの名無しさん
2015/01/16(金) 08:26:50.60ID:oLGQ6wLbrange based for 知ってる俺スゲー君だろ
そのくらい理解しろ
0624デフォルトの名無しさん
2015/01/16(金) 10:05:12.01ID:xsGnLZU7for(int i=0;i<10;i++)みたいな書き方が落ち着くわ。
iteratorでbegin endや
auto みたいな書き方は、馴染めない。
0625デフォルトの名無しさん
2015/01/16(金) 10:26:26.47ID:WEjV0wIz0626デフォルトの名無しさん
2015/01/16(金) 10:29:44.22ID:FzR9lXNEまあ慣れだよ
0627デフォルトの名無しさん
2015/01/16(金) 12:53:21.78ID:oLGQ6wLb0628デフォルトの名無しさん
2015/01/16(金) 15:18:41.03ID:tPfzoFnH0629デフォルトの名無しさん
2015/01/16(金) 15:39:03.66ID:b2lSaBcL聞きたいことを詳しく
0630デフォルトの名無しさん
2015/01/16(金) 15:41:29.18ID:E/p9EfDE0631デフォルトの名無しさん
2015/01/16(金) 15:45:45.08ID:AaRGFWR50632デフォルトの名無しさん
2015/01/16(金) 16:07:08.37ID:WEjV0wIz0633デフォルトの名無しさん
2015/01/16(金) 16:53:18.69ID:FzR9lXNE・戻り値がある
・インスタンス確保後のメンバ変数を操作する時に使われる(カプセル化)
コンストラクタ
・戻り値が無い
・インスタンス確保時に呼ばれる
・メンバ変数の初期化に使われる
・コンストラクタ内で例外が投げられた時、デストラクタが呼ばれない
→例外の懸念がある時はtry - catch
・値渡しでコンストラクタを呼べる(呼べてしまう)
→呼ばれたくない時はexplicit
こんな所かな
0634デフォルトの名無しさん
2015/01/16(金) 17:25:54.28ID:+cZ2zonb0635デフォルトの名無しさん
2015/01/16(金) 23:05:21.99ID:3nkqbk8P貴様、さてはJAVA()ドカタだな
0636デフォルトの名無しさん
2015/01/16(金) 23:54:19.63ID:d6vd/A8uなんでだよw確かにJavaは業務で触った事あるが
デストラクタでハンドラ解放必要な処理の場合はcatchで解放しとかないとリークするんだぞw
まあスマポでカスタムデリータに解放処理書いときゃそんなの要らないが
0637デフォルトの名無しさん
2015/01/17(土) 00:13:52.55ID:v4dny9bUの条件(実質.c, .hファイルと#include)で2つのアプリケーション間で通信をしたい場合どのような方法を使うべきでしょうか?
環境はwindows8です
0638デフォルトの名無しさん
2015/01/17(土) 01:12:21.39ID:C457VsFp0639デフォルトの名無しさん
2015/01/17(土) 04:29:02.45ID:Vi+da9/m{
//この中でpMgrを勝手にコピーさせない方法ってありますか?
}
0640デフォルトの名無しさん
2015/01/17(土) 06:35:10.23ID:BHVrc4CMレビューをしっかりやる
0641デフォルトの名無しさん
2015/01/17(土) 12:06:11.26ID:rF9ZzbWp実行時ロードでCPUの細かいフィーチャ
(サポートしているsseのバージョンなど)で
リンクするAPIを替える機能ってありますか?
0642デフォルトの名無しさん
2015/01/17(土) 15:24:03.01ID:P217qn7Aリンクライブラリ禁止といつことは
数値演算・論理演算・メモリアクセスしかできないということだから
Windowsでは無理。
Visual C++標準のライブラリ以外禁止ということなら
パイプかソケットでも使っておけば?
ただアプリケーション間通信をC++で書くという選択が微妙
0643デフォルトの名無しさん
2015/01/17(土) 15:28:29.27ID:Myj9loPB>数値演算・論理演算・メモリアクセスしかできないということだから
それは可笑しい
ライブラリのソース入手してまとめてコンパイル&リンクすれば良い
それがだめで完全リンク禁止って言うなら実行ファイルすら作れない
0644デフォルトの名無しさん
2015/01/17(土) 15:51:21.07ID:MW9qauOG0645デフォルトの名無しさん
2015/01/17(土) 15:53:02.13ID:sqhqU9t50646デフォルトの名無しさん
2015/01/17(土) 15:58:17.68ID:Vi+da9/mなんかええ感じのスマポとかないんすか?
0647デフォルトの名無しさん
2015/01/17(土) 18:17:59.23ID:BHVrc4CMそもそも pMgr をコピーさせたくないのか、*pMgr をコピーさせたくないのか
どちらにせよ、値を読み出すだけでもコピーだし...
pMgr 渡さなきゃいいじゃん、としか言えない
0648デフォルトの名無しさん
2015/01/18(日) 07:32:17.49ID:AOSxsRnsちょっと何言ってるかわからない
0649デフォルトの名無しさん
2015/01/18(日) 08:42:29.94ID:+NpXYm5Mコピーの定義書いてみ
0650デフォルトの名無しさん
2015/01/18(日) 08:47:58.27ID:AOSxsRnsストレージの別の場所にコピー元を模倣する
オブジェクトが作られることでしょ
0651デフォルトの名無しさん
2015/01/18(日) 10:32:46.45ID:+NpXYm5Mオブジェクト限定ならコピーコンストラクタ禁止しときゃいいんじゃね?
0652デフォルトの名無しさん
2015/01/18(日) 10:47:50.57ID:QMgHICUYコピコンでどうやって防ぐのか教えてもらおうか
void callback(Manager *pMgr) {
Manager pCopy = pMgr; // NG
}
int main() {
Manager m{};
Manager pMgr = &m;
Manager pCopy = pMgr; // OK
}
0653デフォルトの名無しさん
2015/01/18(日) 16:33:24.90ID:aCeCeZGw「オブジェクト限定なら」と書いてあるようだが
0654デフォルトの名無しさん
2015/01/18(日) 17:22:37.19ID:yCk+PJhr0655デフォルトの名無しさん
2015/01/18(日) 18:22:50.11ID:FVveS/hdまともにコード書けるようになってから、出直してこいよ
0656デフォルトの名無しさん
2015/01/18(日) 18:44:35.18ID:yCk+PJhrコンパイル通らないよねそれ
0657デフォルトの名無しさん
2015/01/18(日) 19:09:23.39ID:vb1wMicd0658デフォルトの名無しさん
2015/01/18(日) 19:35:27.72ID:k4kja4YCポインター変数はオブジェクトであると規格で定められてるぞ
0659デフォルトの名無しさん
2015/01/18(日) 20:05:38.08ID:gvUCsrNPつまり、>>639は
callbackの中はコピーNGにしたい、
で、それ以外のところではコピーOKでってことか。
なんでこうすることになったのか>>657じゃないが気になるな
0660デフォルトの名無しさん
2015/01/18(日) 21:07:53.84ID:AOSxsRns0661デフォルトの名無しさん
2015/01/18(日) 21:16:37.69ID:aCeCeZGw俺は「オブジェクト」=「クラスや構造体の実体」と文脈から読んだんだけども
規格だとそうなんだ、知らなかったよ
物知りだねぇ
0662デフォルトの名無しさん
2015/01/18(日) 21:37:21.82ID:N3BwmN9Tnoexcept地獄
const地獄
C++には地獄が多いですね
Cだとグローバル変数地獄とか
0663デフォルトの名無しさん
2015/01/18(日) 23:40:20.64ID:wOPRs65H0664デフォルトの名無しさん
2015/01/19(月) 01:08:11.99ID:BdGCwO3oconst地獄ってどんなの?
なんかデメリットある?
0665デフォルトの名無しさん
2015/01/19(月) 02:29:49.09ID:SwI2Cekrconstだらけでチカチカして記述を忘れたりする
マーフィの法則で記述忘れがそのままmake通ってよくわからないバグを生む
0666デフォルトの名無しさん
2015/01/19(月) 02:46:46.14ID:6ksYFsZ+0667デフォルトの名無しさん
2015/01/19(月) 04:16:37.17ID:nqrjGtBd例えば
http://msdn.microsoft.com/ja-jp/library/e6htdchf.aspxmfc
これの引数であるpDCはこのメンバ関数をオーバーライドした中でしか使ってはいけませんよね?
このようなことを明示するためにpDCをコピー禁止にしたかったのですが…
0668デフォルトの名無しさん
2015/01/19(月) 04:22:17.07ID:nqrjGtBdhttp://msdn.microsoft.com/ja-jp/library/e6htdchf.aspx
url間違えました
0669デフォルトの名無しさん
2015/01/19(月) 04:23:15.40ID:7cvqsiOh0670デフォルトの名無しさん
2015/01/19(月) 04:28:29.24ID:nqrjGtBdやっぱりそういうもんですかね?
0671デフォルトの名無しさん
2015/01/19(月) 04:58:54.54ID:uJhqVOMohttp://ideone.com/IZX6Zh
0672デフォルトの名無しさん
2015/01/19(月) 05:25:19.50ID:sDzJfvsV0673デフォルトの名無しさん
2015/01/19(月) 05:28:24.47ID:uJhqVOMo常識として普通は保存しないしコメントは冗長
0674デフォルトの名無しさん
2015/01/19(月) 07:07:16.21ID:Cyk/lQNq所有権が理解出来てないとクラス設計も壊滅的に酷い物になる。
0675デフォルトの名無しさん
2015/01/19(月) 07:37:45.73ID:TqSS9iKL0676デフォルトの名無しさん
2015/01/19(月) 09:44:06.66ID:nqrjGtBdつまり、コピーを取られないことを前提で作って良いってことですか?
0677デフォルトの名無しさん
2015/01/19(月) 10:16:07.12ID:KaaVf0G8だがD言語ならきっと何とかしてくれるかもしれないっ…!!
0678デフォルトの名無しさん
2015/01/19(月) 13:51:52.63ID:Cyk/lQNq一般的にポインタ保存することをコピー取るなんて言わないから、そういう意味で使ってるなら誤解招くからやめた方がいいぞ
0679デフォルトの名無しさん
2015/01/20(火) 20:07:40.33ID:KZw9T2mJ0680デフォルトの名無しさん
2015/01/21(水) 00:15:39.68ID:7IR5jjAd0681デフォルトの名無しさん
2015/01/21(水) 09:58:23.25ID:hIJga017バリアント、インバリアントがよくわかりません
例えば
int x=0,y+=10,z;
while (x<y) {
z=x;
x++;
}
で
インバリアントがx<y
バリアントがその他でおk?
0682デフォルトの名無しさん
2015/01/21(水) 16:16:08.63ID:rHc4ND4l0683デフォルトの名無しさん
2015/01/21(水) 17:50:17.63ID:65s3laC/0684デフォルトの名無しさん
2015/01/21(水) 17:51:02.25ID:65s3laC/class invariant
0685デフォルトの名無しさん
2015/01/21(水) 19:01:05.21ID:I9/tMJB1> インバリアントがx<y
> バリアントがその他でおk?
まったくだめ、というかそれ以前
そのバリアント・インバリアントはコードではなくコードが表現する処理の意味に関するものだから
無意味な処理のテストコードで形式だけで考えても意味はない
0686デフォルトの名無しさん
2015/01/21(水) 21:22:30.37ID:rHc4ND4l0687デフォルトの名無しさん
2015/01/22(木) 22:30:17.16ID:QOe1CpixName = "データ"\r\n
ここから データ という文字列の部分を取り出したいのですが、
いろんな方法があると思うんですが、スマートな方法教えて下さい。
なお、"データ" という文字列の部分は、いろいろ変わりますが、
改行とか変な文字は含みません。
0688デフォルトの名無しさん
2015/01/22(木) 23:50:29.01ID:axQWmtg/何をしたいのかその文ではさっぱり分からんが、
想像するに\r\nを削りたいってところだろうか
char *Name="データ\r\n";
return strsep(&Name, "\r\n");
0689デフォルトの名無しさん
2015/01/22(木) 23:54:51.76ID:hGP5IRk0Name2 = "Data2"
……
ってたくさんあって、Name1のデータは"Data1", Name2のデータは"Data2"みたくしたいのかな?
0690デフォルトの名無しさん
2015/01/23(金) 00:35:11.91ID:uMcR+6pKエスパーすると、
"Name = 1234¥r¥n"
"Name = abcd¥r¥n"
"Name = 東京都品川区¥r¥n"
こんな感じ?
0691デフォルトの名無しさん
2015/01/23(金) 00:59:49.40ID:M2u72OkA頭から全角半角判定して、一個一個調べて行くのがいいのかな。
0692デフォルトの名無しさん
2015/01/23(金) 01:01:16.66ID:B6TLxfZL0693デフォルトの名無しさん
2015/01/23(金) 01:06:35.32ID:VC3FF7ui本題と違うけどリテラル文字列を変更しちゃあかんやろ
これだからCゲンガーは
0694デフォルトの名無しさん
2015/01/23(金) 01:14:15.29ID:RhfD23E2と
kansu() const noexcept
は何か違いはありますか?
0695デフォルトの名無しさん
2015/01/23(金) 01:37:55.25ID:9tnFJzS/そう、そんな感じですけれど、一点だけ違います。
"Name = 1234\r\n"
ではなくて
"Name = \"1234\"\r\n"
です。
ファイルから読み込んだ文字列なので末尾に\r\nが付きますが、それ以外の部分には
\r\nや、それ以外の制御文字などは入りません。
0696デフォルトの名無しさん
2015/01/23(金) 02:15:09.07ID:ru/IpI5uhttps://ideone.com/wiDaEr
ただ、これは"データ"内に"が文字として存在しない場合に限るけど
0697デフォルトの名無しさん
2015/01/23(金) 03:20:19.06ID:Iw65TJKV柔軟性で選ぶならregex
http://ideone.com/AJbpI5
0698デフォルトの名無しさん
2015/01/23(金) 03:39:34.21ID:ofrdGIC1当初std::multimapを使用していたのですが、全要素に対しての
先頭からの反復処理が非常に低速であるため、スキップリストを利用したいと思いました。
検索して見つけたCS::SkipList ( http://sourceforge.net/projects/csskiplist/ ) を試したところ
反復処理で満足のいく速度が出たため使っていたのですが、使っているうちに
* C++03時代の物であるためムーブが行えない
* 軽微ではあるがメモリリークのバグがある
* 要素の大量追加 => 大量削除を行うとその後の各操作が非常に低速になる?
(細かい検証はしていません。もしかしたらただのメモリフラグメンテーションかも)
のような問題が見られ、別の実装を探した方が良いのではと考えるに至りました。
要件は以下の通りです:
* GPL/LGPL等でなく、ライセンスが比較的緩いこと
(成果物はバイナリ形式で無償で不特定多数に配布予定)
* multimap同様、「重複可能なキー」と「値」のペアを格納するタイプのスキップリスト
* できればムーブに対応していると嬉しい(emplace等)
* できればC++11の拡張forで扱えると嬉しい(begin, end)
自分でもこれから色々探して、最悪自作することも視野に入れていますが
もし既に良い実装をご存じの方がいたら、教えて欲しいです。
0699デフォルトの名無しさん
2015/01/23(金) 11:38:27.61ID:9tnFJzS/>>697
サンプルありがとうございました。
istringstreamもregexも、難しそうなのでふだん使わないので参考になりました。
自分でも作ってみたのですが、
char c_str[] = "Name = \"1234\"\r\n";
string str = c_str;
string::size_type is = str.find("\"") + 1;
string::size_type ie = str.find("\"", is);
string data = string(&str[is], &str[ie]);
いちおう目的は達成できたのですが、こういうやり方はどうでしょうか?
0700デフォルトの名無しさん
2015/01/23(金) 16:08:31.27ID:R2ihxFB70701デフォルトの名無しさん
2015/01/23(金) 16:12:50.60ID:mBK4/sG60702デフォルトの名無しさん
2015/01/23(金) 16:21:10.45ID:Iw65TJKV後端の"が見つからなかった場合のエラー処理ができてない。
0703デフォルトの名無しさん
2015/01/23(金) 16:53:41.82ID:9tnFJzS/文字列には必ずペアでダブルクオーテーションがあることが前提なのですが、
そういう場合でも、エラーチェック処理をするべきでしょうか?
0704デフォルトの名無しさん
2015/01/23(金) 17:01:51.59ID:m9gdTXpE・エラーで文句言う
・落ちる
・鼻から悪魔
0705デフォルトの名無しさん
2015/01/23(金) 17:06:34.53ID:Iw65TJKVその文字列がプログラム埋め込みでもない限りするべきだと思うけど
0706デフォルトの名無しさん
2015/01/24(土) 00:00:03.81ID:qgW96dGE・HDDを消去する
0707デフォルトの名無しさん
2015/01/24(土) 01:35:33.39ID:OAbMDKxg0708デフォルトの名無しさん
2015/01/24(土) 01:42:37.17ID:MUCQBpQd・自爆させる 捕まるか
・入力者の個人情報をツイでさらす これいいかも
鉄則 『入れちゃいけないデータは入れちゃいけない』
0709デフォルトの名無しさん
2015/01/24(土) 02:47:39.21ID:agcMAP5lディレクトリ内のファイル一覧の取得、
ディレクトリまたはファイルが存在するかどうかのチェック、
ディレクトリまたはファイルの作成
をするにはどうしたらよいですか
Objective-CでいうところのNSFileManagerみたいなイメージです
0710デフォルトの名無しさん
2015/01/24(土) 07:34:19.87ID:fHbROJyl中途半端に安全宣言して実は漏れてました
よりも最初から危険だと判ってた方が良いよね
原発と同じ
0711デフォルトの名無しさん
2015/01/24(土) 10:57:57.69ID:Kmb3zjvGstr = @"c:\path\file" ;
みたいに出来ますが、C/C++でも似たような事出来ませんか?
現状だと
str = "c:\\path\\file" ;
みたいに \\ を入れるのが面倒なので。
0712デフォルトの名無しさん
2015/01/24(土) 11:09:46.78ID:innueIxYc++11のRAWストリングリテラルを使う
0713デフォルトの名無しさん
2015/01/24(土) 11:28:57.33ID:Kmb3zjvGありがとうございました。
便利なのが有るんですね。助かりました。
0714デフォルトの名無しさん
2015/01/24(土) 12:45:27.80ID:Kmb3zjvG{
one,
two,
three,
};
int func()
{
return MyEnum::one;
}
とすると、VC++2013では
IntelliSense: 戻り値の型が関数型と一致していません
と出るのですが、関数をMyEnum型にするか、戻り値をintにキャストすれば解決はするのですが、
MyEnum :int と宣言しているので、MyEnumはintになると思ったのですが。
ググったら暗黙の型変換はしないと書いて有ったのですが、ではMyEnum :intの
intはどういう時に使うのでしょうか?有っても無くても同じですか?
要するに関数はint型のままで、キャストせずに戻り値にMyEnumを使う事は出来ませんか?
0715デフォルトの名無しさん
2015/01/24(土) 12:46:26.72ID:ZR5shUeN0716デフォルトの名無しさん
2015/01/24(土) 12:55:05.36ID:ZR5shUeN>intはどういう時に使うのでしょうか?
クラスのバイナリイメージを扱いたいときに便利
struct AbcHeader {
int ver : 4;
int reserved : 28;
enum class MyEnum type;
};
0717デフォルトの名無しさん
2015/01/24(土) 13:26:49.73ID:jVEAYvO6> ではMyEnum :intのintはどういう時に使うのでしょうか?
int以外の整数型を指定したいとき
> 有っても無くても同じですか?
enum classの場合はあってもなくても同じ
> 要するに関数はint型のままで、キャストせずに戻り値にMyEnumを使う事は出来ませんか?
enum classの場合はできない
0718デフォルトの名無しさん
2015/01/24(土) 15:00:04.93ID:+P7E5oiJ全角文字が一文字分右にずれて表示され動かしているキャラクターの前回の座標を上書きすると○の文字の場合○の右半分だけ残ってしまいます
同じコード(少しいじって途中でおかしいのに気付きCtrl+zで戻しました)なのに急にこのような状況になってしまいました
理由がわかる方がいればお願いします
0719デフォルトの名無しさん
2015/01/24(土) 15:09:33.04ID:1f2SI/kI0720デフォルトの名無しさん
2015/01/24(土) 15:23:29.46ID:/AQI/IFIUnicodeとMBCSのどっち?
0721デフォルトの名無しさん
2015/01/24(土) 15:30:37.35ID:SBUC5aCD色々あって自作する事になりましたので、質問を取り下げます
ありがとうございました
0722デフォルトの名無しさん
2015/01/24(土) 15:51:41.08ID:vo9it+x1マルチバイトです
0723デフォルトの名無しさん
2015/01/24(土) 16:55:31.38ID:/AQI/IFI二次元配列で仮想画面を保存して全角の後ろを上書きすれ
0724デフォルトの名無しさん
2015/01/24(土) 22:19:35.41ID:CVvB/wzu配列変数aを{2,1,7,3,6,4,8,5,9}で初期化し、バブルソートで大きな順に並び替えて表示するプログラムを作成せよ
配列要素の参照にはポインタ変数を用いること
0725デフォルトの名無しさん
2015/01/24(土) 23:00:57.11ID:OmHyRM5uC/C++の宿題片付けます 168代目
http://peace.2ch.net/test/read.cgi/tech/1408962564/
0726デフォルトの名無しさん
2015/01/25(日) 00:00:18.23ID:l2NWKfU1それでも直らなかったのですがMSゴシックを標準のフォントに戻すと直りました
他のPCではMSゴシックでも動いてたので結局根本的な原因は不明です
0727デフォルトの名無しさん
2015/01/25(日) 00:22:01.40ID:PYkp2Zoh解説ありがとうございました。class無しでやる事にしました。
構造体で
int ver : 4;
の :4 は何を表しているのでしょうか?
ググりたいのですがキーワードを教えて下さい。
0728デフォルトの名無しさん
2015/01/25(日) 00:25:59.54ID:6pmbh6NX0729デフォルトの名無しさん
2015/01/25(日) 04:15:53.25ID:P8ARGA9yCのstatとsystemを使って出来るみたいですね。
しかしもう少し抽象化されたものはないんでしょうか。
0730デフォルトの名無しさん
2015/01/25(日) 04:27:46.19ID:q//XhoOI0731デフォルトの名無しさん
2015/01/25(日) 04:50:16.61ID:HQ3aG4X80732デフォルトの名無しさん
2015/01/25(日) 20:17:59.89ID:jnERKKsI遅すぎるし
0733デフォルトの名無しさん
2015/01/25(日) 20:38:16.56ID:Wnz0wilqfwdヘッダ用意してなかったりasio、format、regexだったりは遅くなるけど、
それ以外はプリコンパイルヘッダに含めればそこまで足引っ張らない
0734デフォルトの名無しさん
2015/01/25(日) 20:39:50.56ID:jnERKKsI0735デフォルトの名無しさん
2015/01/25(日) 20:43:43.36ID:pVReJ80Y0736デフォルトの名無しさん
2015/01/25(日) 20:44:30.35ID:Wnz0wilq0737デフォルトの名無しさん
2015/01/25(日) 21:40:14.60ID:q//XhoOI0738デフォルトの名無しさん
2015/01/26(月) 00:30:57.11ID:UM6C6XDiデータはありますか。
0739デフォルトの名無しさん
2015/01/26(月) 00:47:39.69ID:CYa04E4M0740デフォルトの名無しさん
2015/01/26(月) 01:02:32.94ID:5Hop7PEH実装実験のためのものだし、バージョン依存も激ししい。
0741デフォルトの名無しさん
2015/01/26(月) 01:03:38.74ID:XNIaxWEk0742デフォルトの名無しさん
2015/01/26(月) 01:07:34.43ID:aJ+RSSru仕事用でasioの代用だと何使ってる?
0743デフォルトの名無しさん
2015/01/26(月) 05:51:49.64ID:wwEyx5FJboost.poolテメーはダメだ。
0744デフォルトの名無しさん
2015/01/26(月) 06:18:40.46ID:fhQPsb6z0745デフォルトの名無しさん
2015/01/26(月) 06:21:42.54ID:bg9QqCyi0746デフォルトの名無しさん
2015/01/26(月) 23:15:44.30ID:9eewx3ezjavaは経験してますが、C++は最近0から独習しています
今回教えていただきたいのはC++のクラスの多重継承についてなのですが
これは本来の基底クラスの拡張という以外に、javaのインターフェースの代替として使用しても良い機能でしょうか?
したいことといえば、例えばjavaであればインターフェースを使用して
class Bar extends Foo implements IMovable, IContainerable,ISpeakable
とクラスの親子関係と性格を決めていたところを
C++ではその目的で
class bar : public foo, public mover, public container, public speaker
のように全て継承で一緒くたに扱う形で実装してよいのでしょうか
javaのインターフェースが実装を保障するものであるのに対し
C++ではそれに相当するものが見あたらず、とりあえず実装上同じような事が出来そうなのが多重継承だったのですが
C++本来の継承の意味合いからしてそういう使い方をしてよいのか気になっています
0747デフォルトの名無しさん
2015/01/26(月) 23:22:01.37ID:3+xNlERk良い
0748デフォルトの名無しさん
2015/01/26(月) 23:37:21.36ID:a9uK3KSBこれはC#のインターフェース相当かな。
Javaのインターフェースに相当するC++の記述は
class Bar : public virtual foo
0749デフォルトの名無しさん
2015/01/26(月) 23:41:53.42ID:3ZfUr7hf0750デフォルトの名無しさん
2015/01/26(月) 23:50:56.82ID:ZzAwnl5E違うから。
嘘教えんなよ
0751デフォルトの名無しさん
2015/01/27(火) 00:00:11.04ID:6+4RVPqaありがとうございます
では、とりあえずその方向で移植しながら勉強してみます
0752デフォルトの名無しさん
2015/01/27(火) 00:07:34.76ID:RrImLxtBそのinterface用のクラスで
virtual void a()=0;
って感じで後ろに=0;を付けて定義するとinterface用クラスを派生した側でvoid a()を実装しなければ実体化出来なくなるからJavaとかのinterfaceに近くなる。
詳しくは 純粋仮想関数 でググれ
0753デフォルトの名無しさん
2015/01/27(火) 01:47:04.24ID:e342vVi2そして共通メソッドもBaseクラスじゃなくこのインターフェース用クラスのメソッドとして実装しちゃうので、ここでJavaとの実装方法に違いが出てた、
ただ、JavaもJava8からインターフェースにdefaultメソッドを実装できるようになったから、
C++と同じく多重継承は出来るようになった。
だけど、それはインターフェースに限定され、クラスの多重継承は未だに出来ない事から、
実装をインターフェースに集約出来るってメリットが生まれたって考えとけば良いと個人的には思ってる。
0754デフォルトの名無しさん
2015/01/27(火) 03:00:56.45ID:QKfojaOJそれより仮想継承についてここまで説明なしなんだが。
0755デフォルトの名無しさん
2015/01/27(火) 03:05:24.02ID:RrImLxtBinterfaceに仮想継承関係ないから
0756デフォルトの名無しさん
2015/01/28(水) 11:36:45.00ID:0I4WdO58p1->p2->member
みたいにポインタの->が出てくるのが普通だと思いますが、
c1.c2.member
みたいに . だけでプログラムを書くことは可能でしょうか?
どっちの方法が良いとかありますか?
好き好きですか?
0757デフォルトの名無しさん
2015/01/28(水) 12:18:16.41ID:RtqNScslそんなことにこだわる意味が分からないよ
0758デフォルトの名無しさん
2015/01/28(水) 12:27:05.03ID:U/zfeC5AHoge hoge();
hoge.pointer->method();
hoge.reference.method();
}
(B){
Fuga *fuga = new Fuga();
fuga->pointer->method();
fuga->reference.method();
delete fuga;
}
0759デフォルトの名無しさん
2015/01/28(水) 12:54:59.27ID:0I4WdO58レスありがとうございます。
-> を使うということは、new をしているということですよね。
なので質問の意図としては、newやdeleteを使わずに
. だけでプログラムを組むなんていうのは出来るのかな?現実的では
ないのかな?実際のところはどうなんだろうという質問です。
0760デフォルトの名無しさん
2015/01/28(水) 12:56:55.48ID:4k8FABlu(多態を使うとかnewで構築したとか)
そうした理由が無ければ好きにすればいい
0761デフォルトの名無しさん
2015/01/28(水) 15:05:31.44ID:Uf2MmTr/new使わなくてもアローは使う事がある
func1()
{
A a;
func2(&a);
}
func2(*A pa)
{
pa->member
}
0762デフォルトの名無しさん
2015/01/28(水) 21:58:25.98ID:JxueOrGNfunc1()
{
A* a = new A;
func2(*a);
}
func2(A& pa)
{
pa.member
}
0763デフォルトの名無しさん
2015/01/28(水) 22:47:19.01ID:anpOJbJrメンバに参照があるとoperator=がデフォルトで定義されなくなるし大抵の場合不便だからポインタにすることが多いけど
0764デフォルトの名無しさん
2015/01/28(水) 22:50:41.67ID:P3TzAr8+一応templateでポリシークラス渡す方法だとアロー消せるけどこっちはダックタイピングだから主旨ずれちゃうけど
0765デフォルトの名無しさん
2015/01/28(水) 23:07:35.37ID:anpOJbJr0766デフォルトの名無しさん
2015/01/29(木) 01:14:59.53ID:Du6RynO1とりあえず、見た目にこだわっての話なら、そのこだわりは早めに矯正したほうがいい
それらの使い分けは、構文的なこだわりとは全く別の視点で行われるべき
例えば大量のデータに対する順次処理はインライン関数内でスタック処理したが早い
ただし再帰でやったら死ぬから、自分が何をしようとしているかがわからない内は無理して使い分けはしないほうがいい
尚、ポインタであっても参照にとればアロー使わずメンバにアクセスできるけど、これに特に意味はない
0767デフォルトの名無しさん
2015/01/29(木) 02:26:57.54ID:q7BZe7Bxその変数がnullでない事を保証するぐらいの意味はあるだろ
0768デフォルトの名無しさん
2015/01/29(木) 10:16:32.39ID:wMkjI3CSお世話になります。
私、責任者の加茂と申します。以後、宜しくお願い致します。
http://www.apamanshop.com/membersite/27009206/images/kamo.jpg
浪速建設様の見解と致しましては、メールによる対応に関しましては
受付しないということで、当初より返信を行っていないようで、今後につい
てもメールや書面での対応は致しかねるというお答えでした。
このように現在まで6通のメールを送られたとのことですが、結果一度も
返信がないとう状況になっています。
私どものほうでも現在までのメール履歴は随時削除を致しております
ので実際に11通のメールを頂戴しているか不明なところであります。
・T http://s-at-e.net/scurl/ia-T.html
・Zle http://s-at-e.net/scurl/ia-Zle.html
0769デフォルトの名無しさん
2015/01/29(木) 12:34:49.33ID:+k0iBMBaWin32 プラットホームだとビルドできるのに x64 だと
デストラクタなどが未定義というリンクエラーが発生してしまうのには
どんな原因が考えられるでしょうか?
エラー自体は以下の様な感じです。
コンストラクタに関しては宣言すらしてないのに未定義と言われてしまいます。
error LNK2019: 未解決の外部シンボル "__declspec(dllimport) public: virtual __cdecl Hoge::~Hoge(void)"
error LNK2019: 未解決の外部シンボル "__declspec(dllimport) public: __cdecl Hoge::Hoge(void)"
0770デフォルトの名無しさん
2015/01/30(金) 15:15:38.64ID:TnZuFfmI情報が得られません。
ホストPCではきちんと取得できるのですが・・・。
原因が分かる方、どうかアドバイスをお願いします。
仮想PCのOSはwindows7 32bitで
そのときのpid、OpenProcessの値は特に問題なさそうです。
OpenProcessのアクセスフラグにPROCESS_QUERY_INFORMATIONをきちんと追加してあります。
試しに同じハンドルでReadProcessMemoryを使って読み込み可能なアドレスを
読んでみましたが、問題なしです。
0771デフォルトの名無しさん
2015/01/30(金) 16:38:50.26ID:NPtMLJeuTo get extended error information, call GetLastError.
Possible error values include ERROR_INVALID_PARAMETER.
0772デフォルトの名無しさん
2015/01/30(金) 18:19:02.70ID:qhLo8LD3多分これと同じような問題だと思うが
バージョンは違うが同じ線で解決できるんじゃないかな
http://stackoverflow.com/questions/15294606/compiling-32-bit-code-to-64-bit
0773770
2015/01/30(金) 19:05:38.20ID:TnZuFfmI0774デフォルトの名無しさん
2015/01/31(土) 03:33:51.34ID:HKGnWIrq日本語の自動翻訳は古いしごっそり抜けおちてる
0775デフォルトの名無しさん
2015/01/31(土) 08:35:04.41ID:YMt5PyZL0776デフォルトの名無しさん
2015/01/31(土) 22:14:24.84ID:cjFh9ic9struct Hoge
{
friend Hoge operator+(const Hoge& rhs,const Hoge& lhs)
};
struct Hoge
{
Hoge operator+(const Hoge& rhs)
};
0777デフォルトの名無しさん
2015/01/31(土) 22:16:41.56ID:W7HhQqzU好きにしろ
0778デフォルトの名無しさん
2015/01/31(土) 22:25:00.72ID:JW07CSIR下の方こうな
Hoge operator+(const Hoge& rhs)const;
0780デフォルトの名無しさん
2015/01/31(土) 22:27:30.29ID:cjFh9ic9どのように自由度が高いのか、教えてください
0781デフォルトの名無しさん
2015/01/31(土) 22:34:48.45ID:pbDgT3cFこうだろjk
Hoge operator+(const Hoge& rhs) const &;
Hoge operator+(const Hoge& rhs) &&;
0782片山博文MZ ◆T6xkBnTXz7B0
2015/01/31(土) 22:39:41.91ID:NOJeJgItオーバーロード
Hoge operator+(int rhs,const Hoge& lhs);
Hoge operator+(const Hoge& rhs,int lhs);
rhsとlhsが逆だよ。rhsはright hand sideだろ。
0783デフォルトの名無しさん
2015/01/31(土) 22:40:18.05ID:cjFh9ic9そいうこと聞いてるわけはないんだけどな・・・
0784デフォルトの名無しさん
2015/01/31(土) 22:41:21.87ID:cjFh9ic9別にrhsはright hand sideなんて主張はしてませんけど・・・
0785デフォルトの名無しさん
2015/01/31(土) 22:42:57.40ID:pUcWKA/a0786デフォルトの名無しさん
2015/01/31(土) 22:43:55.72ID:NOJeJgIt右と左が違う
0787デフォルトの名無しさん
2015/01/31(土) 22:53:25.91ID:6bqytg640788デフォルトの名無しさん
2015/01/31(土) 23:00:37.21ID:NOJeJgIt0789デフォルトの名無しさん
2015/01/31(土) 23:09:14.02ID:JW07CSIR別に必須じゃないし、それだと右がmoveに対応してないから片手落ち
0790デフォルトの名無しさん
2015/01/31(土) 23:17:52.59ID:9f9nMqshHoge operator+(Hoge&& rhs) const &;
Hoge operator+(const Hoge& rhs) const &;
Hoge operator+(const Hoge& rhs) &&;
0791デフォルトの名無しさん
2015/01/31(土) 23:21:08.36ID:uiYKM1qlどちらもいまいち、二項演算子の基本はこう。11以降ならmoveを考慮した変形もあり
// 非friend
inline Hoge operator+(Hoge lhs, Hoge const & rhs) // 左辺は参照ではなくコピー
{
return lhs += rhs; // operator+=も自身(Hoge)の+を使わず別に定義
}
0792デフォルトの名無しさん
2015/01/31(土) 23:25:07.98ID:DdagF+N6これだと
Hoge{} + Hoge{}
が解決できないと思うが
0793デフォルトの名無しさん
2015/01/31(土) 23:27:08.38ID:SXaozwORHoge operator+(const Hoge& rhs) const &;
Hoge operator+(const Hoge& rhs) &&;
Hoge operator+(Hoge&& rhs) &&;
だろjk
0794デフォルトの名無しさん
2015/02/01(日) 11:14:38.73ID:TzQjRziG0795デフォルトの名無しさん
2015/02/01(日) 11:16:01.24ID:TzQjRziG0796デフォルトの名無しさん
2015/02/01(日) 11:48:08.81ID:qD0MVFLG0797デフォルトの名無しさん
2015/02/01(日) 12:07:20.71ID:cy3G0Gxv右辺に結果入れて return std::move(rhs);
0798デフォルトの名無しさん
2015/02/01(日) 12:36:47.48ID:fuhak8XWa[0]='A';
a[1]='\0';
ってやると、 A \0 \0 って3文字分メモリを取って、隣接する配列とかがおかしくなるんですが何でですか。
0799デフォルトの名無しさん
2015/02/01(日) 12:45:24.79ID:+XxUWgAM何が起こってもおかしくない。
0800デフォルトの名無しさん
2015/02/01(日) 12:49:21.99ID:ofkZJOEV配列外にアクセスしたら別の変数にアクセスしてしまう場合もあるわな
0801デフォルトの名無しさん
2015/02/01(日) 12:50:56.27ID:viDnpXeU0802デフォルトの名無しさん
2015/02/01(日) 13:02:28.61ID:ofkZJOEV解読してくれよエスパー
0803デフォルトの名無しさん
2015/02/01(日) 13:12:25.51ID:DsQLSXV2オーバーロードを追加。もちろん+が項の交換可能なときだけ
inline Hoge operator+(Hoge lhs, Hoge const & rhs) { return lhs += rhs; } // >>791
inline Hoge operator+(Hoge const & lhs, Hoge && rhs) { return rhs += lhs; }
0804デフォルトの名無しさん
2015/02/01(日) 13:13:21.84ID:fuhak8XWstrcpy(a,"A");
a[0] a[1]
ってすると、A \0 って領域が取られると思ってたので、
a[1] に '\0' を直接入れても変わらないと思ってたのですが違うんですかね。
0805デフォルトの名無しさん
2015/02/01(日) 13:22:00.98ID:F9WepZKra[1]にはアクセスしてはいけません
0806803
2015/02/01(日) 13:26:13.54ID:DsQLSXV20807デフォルトの名無しさん
2015/02/01(日) 13:34:48.58ID:fuhak8XWだったら A \0 ってなるが、
char a[1] ; strcpy(a,"A");
だと A しか格納されないって事ですかね。この場合終端文字が無いって事ですかね。
0808デフォルトの名無しさん
2015/02/01(日) 14:07:18.27ID:mNLzuGxfその後何がおきてもしかたない状態
0809デフォルトの名無しさん
2015/02/01(日) 14:08:25.74ID:ofkZJOEVどっちも 'A'と'\0'の2バイトをコピーするよ、
ただしstrcpyはコピー先の確保メモリ数なんて考慮しないから、
下の方は確保領域外であるa[0]の次に'\0'を書き込んじゃうのでよろしくない
0810デフォルトの名無しさん
2015/02/01(日) 14:28:19.84ID:sjXjc1T+直ちに重火器で破壊停止される場合と
人をひいても気付かずにそのまま走り続ける場合がある
>>807 の例は後者
0811デフォルトの名無しさん
2015/02/01(日) 14:34:13.41ID:fuhak8XWstrcpy(a,"A");で
a[0] にA その次に \0 が入る。 a[1] = '\0' でも同じ事。
文字列としてaを扱った場合 aの隣の領域に変更が無ければ A\0の文字列として扱える。
ただし a[0] の隣に \0 を入れた時点で、
その領域を使ってた変数などが先頭が\0になって壊れると言う事ですね。
0812デフォルトの名無しさん
2015/02/01(日) 14:41:54.37ID:ofkZJOEVいや、違う
配列外が'\0'になってるのはOSがよろしくやってくれてるだけで、
環境が違えばメモリ確保領域外にゴミデータが入ってる事なんてよくある、
メモリ確保領域外がすべて0クリアされてる前提でコードを組むのは環境依存になるし、お作法的にもやっちゃダメ
> その領域を使ってた変数などが先頭が\0になって壊れると言う事ですね。
こっちも、変数のフラグメンテーションによって配列外アクセスが常に別の変数の先頭領域になるなんて保障がないよ
0813デフォルトの名無しさん
2015/02/01(日) 14:48:51.05ID:ofkZJOEV例えば
int a[3] = {0};
だと、a[0] == 0、a[1] == 0、a[2] == 0
int a[3] = {5, 2};
だと、a[0] == 5、a[1] == 2、a[2] == 0
char a[3] = "A";
だと、a[0] == 'A'、a[1] == '\0'、a[2] == 0('\0')
0814デフォルトの名無しさん
2015/02/01(日) 17:52:07.52ID:5WStzBZM0815デフォルトの名無しさん
2015/02/01(日) 19:19:45.80ID:WJjCYs3Yこれはdouble型の桁数を超えたんでしょうか?
この数字が出るとその後、この数字に乗算しても正しい結果にならないんですが
0816デフォルトの名無しさん
2015/02/01(日) 19:22:02.20ID:l+3aqkIQ0817デフォルトの名無しさん
2015/02/01(日) 19:27:49.82ID:l+3aqkIQそれ
0.00000164933…
って数
計算してるところが解らないから何ともいえないけど計算間違ってるだけじゃない?
0818デフォルトの名無しさん
2015/02/01(日) 19:44:20.18ID:ckgWNtQ30819デフォルトの名無しさん
2015/02/01(日) 19:58:22.82ID:6YUTF7Wm>double型の桁数を超えたんでしょうか?
いいえ、違います。
計算上は何ら問題は起きていません。
0820デフォルトの名無しさん
2015/02/01(日) 22:03:42.02ID:sjXjc1T+桁あふれじゃなくてもとんでもない結果が出たりする
0821デフォルトの名無しさん
2015/02/01(日) 22:10:54.40ID:lvVqp80y不動小数点数の取り扱いが悪いとしか言いようがないような
後は実際のコード見なきゃなんとも言えない
0822デフォルトの名無しさん
2015/02/01(日) 23:59:44.94ID:zNKk2ZpTMINGWのG++ならば、doubleでなくて
long doubleを指定して4倍長計算をしてみたら
どうなりますか。
0823デフォルトの名無しさん
2015/02/02(月) 03:12:19.44ID:E0RD/vzJうちはPC二台でエクセルでそれぞれ同じ計算して
答え合わせしてるので完璧ですっ(キリっ)
って逝ってたの思い出した
0824デフォルトの名無しさん
2015/02/02(月) 09:42:30.91ID:nUUGZ8+L検算してるだけだろ?
0825デフォルトの名無しさん
2015/02/02(月) 11:20:39.19ID:EZQev4rj0826デフォルトの名無しさん
2015/02/02(月) 15:05:44.82ID:3eUmmy+n同じデータと同じマクロを使ってペンティアムバグの対策するんだよな
当然だよな
0827デフォルトの名無しさん
2015/02/02(月) 15:31:51.32ID:WjiHP3OZ0828デフォルトの名無しさん
2015/02/02(月) 15:37:56.82ID:nBismiQT0829デフォルトの名無しさん
2015/02/02(月) 15:47:58.62ID:RH7feET7唇に火の酒
背中に人生
0830デフォルトの名無しさん
2015/02/02(月) 17:49:11.18ID:DUpXUgxTども^^;
知らなかったす0.00000164933だったなんて
0831デフォルトの名無しさん
2015/02/02(月) 18:29:45.09ID:nUUGZ8+L喪黒のハグなら怖い。
0832デフォルトの名無しさん
2015/02/02(月) 18:41:31.04ID:2aaoC/Ewじゅりー!ああジュリー、素敵!
0833デフォルトの名無しさん
2015/02/02(月) 20:06:28.87ID:9S8Foh710834デフォルトの名無しさん
2015/02/03(火) 00:47:17.81ID:Ol5Pkl9Dそもそもおまえ浮動小数点型使う必要ないんじゃね
桁数多いからってならlong long使えよ
0835デフォルトの名無しさん
2015/02/03(火) 07:05:07.74ID:2QvjDp7A0836デフォルトの名無しさん
2015/02/03(火) 08:07:41.01ID:Ak6uoSi3そんなうさんくさい講義は受けたことないわ
0837デフォルトの名無しさん
2015/02/03(火) 08:10:35.59ID:00JNNVeasatisfaction
0838デフォルトの名無しさん
2015/02/03(火) 10:23:01.06ID:cHPe/D1wfor (int i = 0; i<1000; i++)
{
auto nowS = std::chrono::system_clock::now();
// 10秒前後掛かる重い処理
auto nowE = std::chrono::system_clock::now();
auto millisec = duration_cast_milliseconds(nowE - nowS).count();
}
みたいな感じで
重い処理に掛かる時間を計測しているのですが、1000回繰り返して正常に終わる場合もあれば、
1000回繰り返すと、時々1,2回くらい計測時間がマイナスになるんですが、そんなこと有りますか?
0839デフォルトの名無しさん
2015/02/03(火) 10:39:02.57ID:N+AEw8su0840デフォルトの名無しさん
2015/02/03(火) 13:24:52.25ID:cHPe/D1wありがとうございました。steady_clockを試してみます。
0841デフォルトの名無しさん
2015/02/03(火) 17:32:32.52ID:cHPe/D1wWinXP32SP3のマシンで実行するとやはり、マイナスの値が計測されました。このコードで何かおかしな部分ありますか?
だいたいいつもi=2000前後で発生します。でも、その後は、また正常に計測されます。再現実験に2,3時間かかるので
困っています。
#include <Windows.h>
#include <string>
#include <chrono>
#include <iostream>
using namespace std;
void main(){
for (int i = 0; i < 1000000; i++){
auto nowS = std::chrono::steady_clock::now();
Sleep(5 * 1000); // 5 sec
auto nowE = std::chrono::steady_clock::now();
auto millisec = std::chrono::duration_cast<std::chrono::milliseconds>(nowE - nowS).count();
cout << "i=" << i << endl;
cout << millisec << endl;
if (millisec < 0){
wstring msg = L"millisec=" + to_wstring(millisec);
MessageBox(NULL, msg.c_str(), L"マイナス", MB_OK);
}
}
}
0842デフォルトの名無しさん
2015/02/03(火) 17:41:47.29ID:Ii7aDZgi初レスだが。ダメだったら確実なAPIを使えばいい。
マルチプラットフォームはchronoとwinAPIを切り替える部分を自作したらいい。
0843デフォルトの名無しさん
2015/02/03(火) 18:20:52.61ID:cHPe/D1wレスありがとうございました。
WinAPIで確実なのはGetLocalTime()でしょうかね?
なお841をXP向けにReleaseビルドしたときはランタイムライブラリはマルチスレッド(/MT)
です。それ以外の設定はデフォルトだと思います。
0844デフォルトの名無しさん
2015/02/03(火) 18:38:06.35ID:q60KfZim0845デフォルトの名無しさん
2015/02/03(火) 18:48:48.60ID:nWWy4Uvl1秒に一回現在時刻を取得して出力するプログラムを動かし続けたらどうなる?
コンピューターの時刻が戻っているのかプログラムがおかしいのかの切り分けはすべき
0846デフォルトの名無しさん
2015/02/03(火) 20:33:54.88ID:Sv24YYpgC#でいうところのActionやdelegateは無いみたいなので困ってます
たすけてください
0847デフォルトの名無しさん
2015/02/03(火) 20:41:14.57ID:E7BKCiQpGetSystemTimeAsFileTime()を使えばいいんじゃないかな?
0848デフォルトの名無しさん
2015/02/03(火) 21:06:56.27ID:N+AEw8sustd::function
0849デフォルトの名無しさん
2015/02/04(水) 01:13:32.90ID:VCpWnwFT内部クラスを使うにせよフレンドクラスにするにせよ、クラスAのヘッダにクラスBの宣言は露出せざるを得ないもんでしょうか?
クラスAのサイズやらには影響しないので宣言を公開する必要まったくないのですが…。
0850デフォルトの名無しさん
2015/02/04(水) 01:25:35.27ID:WTx4SMA50851デフォルトの名無しさん
2015/02/04(水) 04:17:43.82ID:kkq1LSla外部からアクセスさせないためにprivateメンバにしてるんだろ。クラス定義の時点でfriendにもしてない内部クラスでもないクラスがアクセスできたら困るわ
ソースファイルに隠蔽したいなら、privateメンバの参照渡すなり何なりやりようはある
>>850
・共有メモリを監視して変更があったらイベントを実行する
・共有メモリとは別に名前付きパイプを使ってメッセージを送信し、受信したらイベントを実行する
どっちでもお好きなのを。どちらにせよイベント駆動する側のスレッドで何らかの監視はせにゃあかんよ
0852デフォルトの名無しさん
2015/02/04(水) 11:34:39.12ID:It97W8huVS2013のsteady_clockにはバグがあってシステム時刻に連動してるから使えないよ
時刻同期された時点でアウト
VS2015(プレビュー版)では修正したって記述があるけど、MSのことだから
VS2013は直さず放置かも
0853デフォルトの名無しさん
2015/02/04(水) 12:06:06.38ID:TJY7yLxXそうみたいですね。
何日も連続で使っても正しく時刻を計測できる方法は無いのでしょうか?
どの方法でも、たとえバグが無くても、必ず上限がありますよね?
0854デフォルトの名無しさん
2015/02/04(水) 12:32:09.25ID:zDVY2b+Vカウンタの型が64ビット整数だから、精度が1ナノ秒と仮定しても200年以上持つ
初期化時点の日付を保持しておいて、現在日時が必要になったタイミングで
カウンタ値から経過時間を計算して日付に反映すればいい気がする
と思ったがXPだと時間計測にこいつらは使えないらしい
残念
http://d.hatena.ne.jp/shiku_otomiya/20100218/p1
0855デフォルトの名無しさん
2015/02/04(水) 13:10:00.31ID:It97W8hu処理時間を計測するだけなら↓(のサンプルコードを参照)でいいと思う
https://msdn.microsoft.com/ja-jp/library/cc429827.aspx
1msの狂いもイヤとか49.7日以上掛かる処理時間を計測したいとかなら駄目だけど
0856デフォルトの名無しさん
2015/02/04(水) 14:01:38.05ID:bcJPu6wA助けてほしい。
mbedでEthernetInterfaceライブラリを使ってUDP通信をするプログラムなんけども
char out_buffer[] = "Hello\n";
sock.sendTo(echo_server, out_buffer, sizeof(out_buffer));
これで文字列以外を送信する場合ってどうすれば良いの?
mbedにRJ-45のコネクタつなげて、実際にやってるんだけど
文字列は送れてもそれ以外の、例えばADコンバータで変換した電圧の数値とかを送る方法が分からない。
戻り値がintだったりする場合は、それを一度キャストしてやらないとダメなんですか?
ちな
http://developer.mbed.org/handbook/Socket
ここのUDP Echo Clientがソース全文です。
あとmbedでのプログラムの話なので
板違いだったらすいません
0857デフォルトの名無しさん
2015/02/04(水) 14:23:36.96ID:e5R1ECjvsock.sendTo(echo_server, (char *)&hoge, sizeof(hoge));
0858デフォルトの名無しさん
2015/02/04(水) 14:42:54.62ID:HaKHxANLキャストすればいいんじゃない。sprintfで文字列として送ってもいいし。
0859デフォルトの名無しさん
2015/02/04(水) 15:04:20.41ID:bcJPu6wAありがとうございます
キャストで行けました。
これでLANオーディオもどき作成に戻れます
0860デフォルトの名無しさん
2015/02/04(水) 16:18:54.28ID:X9M7ENi6親ウィンドウのあるボタンを押すと
子ウィンドウが出て(この間、親ウインドウの操作不可)
子ウィンドウを閉じると親ウィンドウに操作が移る。
こういうプログラムを作りたいのですが、いまいち分かりません。
ウィンドウを一時的に操作不可にする命令などあるのでしょうか?
0861デフォルトの名無しさん
2015/02/04(水) 16:22:07.49ID:+U2BPPPkDialogBox
0862デフォルトの名無しさん
2015/02/04(水) 16:23:22.40ID:HaKHxANL0863デフォルトの名無しさん
2015/02/04(水) 16:24:32.67ID:YTblBMcd「モーダルダイアログ」でググればおk
0864デフォルトの名無しさん
2015/02/04(水) 16:36:13.74ID:X9M7ENi6>>863
調べてみます。ありがとう。
0865デフォルトの名無しさん
2015/02/04(水) 18:32:06.27ID:xIWm3ZJGa->exit();
みたいなのは、ああ、A* a=new A();という感じで宣言したんだなと分かるのですが、
a()→exit();
という形になるのがよくわからないです。どういう時にこうなるんでしょうか?
0866デフォルトの名無しさん
2015/02/04(水) 18:35:15.77ID:tLaUN7Vd(aがクラスでoperator ()が定義されてる場合なども含め)
A* a(){
static A s;
return &s;
}
0867デフォルトの名無しさん
2015/02/04(水) 18:49:49.64ID:wQefkSeYポインタの場合nullが返るかどうかわからないからそんな呼び方出来ない
0868デフォルトの名無しさん
2015/02/04(水) 19:27:59.73ID:yFnBLuNbはぁぁぁ???
a->exit(); のaがnullかどうかの話と何が違うんだ
0869デフォルトの名無しさん
2015/02/04(水) 19:33:14.64ID:PGYlb/p8this が null でも問題なくメンバ関数を呼ぶことができる、C++ ならば
0870デフォルトの名無しさん
2015/02/04(水) 19:41:32.62ID:wQefkSeYaがnullかどうかは自分でポインタ取るんだから解るだろ
他からポインタ受け取るときnullが許されないなら参照にしろって話
>>869
thisがnullでも呼んで大丈夫な関数を普通のメンバー関数にすんなstaticにしろ
0871デフォルトの名無しさん
2015/02/04(水) 19:44:23.01ID:S0wmMYUB> 自分でポインタ取るんだから解るだろ
void foo(A *a) {a->exit();}
0872デフォルトの名無しさん
2015/02/04(水) 19:45:39.09ID:wQefkSeY2行目も読めないの?
0873デフォルトの名無しさん
2015/02/04(水) 19:46:51.26ID:PGYlb/p8>thisがnullでも呼んで大丈夫な関数を普通のメンバー関数にすんなstaticにしろ
それは Java, C# に毒されているとしか、C/C++ の世界ならば当たり前の仕様
0874デフォルトの名無しさん
2015/02/04(水) 19:46:57.57ID:S0wmMYUBすまんw
0875デフォルトの名無しさん
2015/02/04(水) 19:49:41.18ID:wQefkSeY> それは Java, C# に毒されているとしか、C/C++ の世界ならば当たり前の仕様
C++はともかくCでnullのメンバー呼んで(?メンバー変数へのアクセス?)大丈夫ってどんな場合だよ
0876デフォルトの名無しさん
2015/02/04(水) 19:50:58.46ID:HaKHxANL0877デフォルトの名無しさん
2015/02/04(水) 19:53:13.09ID:tLaUN7Vdやっぱstaticにしてほしいよなあ
0878デフォルトの名無しさん
2015/02/04(水) 20:16:45.46ID:PGYlb/p8OO でない C が記述にあるというだけで揚げ足とりに走る必死さw
0879デフォルトの名無しさん
2015/02/04(水) 20:32:44.63ID:FmLt4Q/z> this が null でも問題なくメンバ関数を呼ぶことができる、C++ ならば
そうなんだっけ?
仮想メンバ関数だったらどうなるんだ?
0880デフォルトの名無しさん
2015/02/04(水) 20:35:38.26ID:wQefkSeYは?OOとか関係無いんだけど
0881デフォルトの名無しさん
2015/02/04(水) 20:38:37.81ID:wQefkSeY死ぬ
0882デフォルトの名無しさん
2015/02/04(水) 20:47:18.03ID:FmLt4Q/zメソッド自体は存在するから仮想じゃなければ大抵大丈夫
>>881
だよね、そもそも仮想じゃないケースだとして
> this が null でも問題なくメンバ関数を呼ぶことができる、C++ ならば
これって保証されてるんだっけ?
0883デフォルトの名無しさん
2015/02/04(水) 20:55:26.36ID:PGYlb/p8これはやられたね‥
0884デフォルトの名無しさん
2015/02/04(水) 21:42:07.02ID:Azmp6pfC>ポインタの場合nullが返るかどうかわからないからそんな呼び方出来ない
いやそれはおかしい。
参照の場合nullptrを返すことが不可能だが
ポインターの場合でもnullptrの可能性が有るかどうかは仕様書読めばわかる。
不安なら
a()->exit(); // a() never returns null
と書いときゃいいだけ
0885デフォルトの名無しさん
2015/02/04(水) 22:23:28.12ID:wQefkSeYそりゃそうだけど参照にしとけばドキュメントに書く必要すらないし
0886デフォルトの名無しさん
2015/02/04(水) 23:49:32.47ID:MGLmZlif保証されてないはず。
struct X
0887デフォルトの名無しさん
2015/02/04(水) 23:54:04.83ID:MGLmZlifstruct X
{
void f() {}
};
int main() {
X* x = nullptr;
x->f();
}
このx->f();は(*x).f();のシンタックスシュガーだから、nullポインタのxをデリファレンスしてる時点で未定義動作
だから例えばfが呼ばれる前にabortする処理系があってもおかしくないはず
0888デフォルトの名無しさん
2015/02/05(木) 00:01:35.89ID:OFR6zSUUすると
X::f()は
f(X*)に変換されたのかもしれない
0889デフォルトの名無しさん
2015/02/05(木) 00:07:54.97ID:3Yv7qBdaeaxレジスタにthis入れて関数呼んでるだけだ
0890デフォルトの名無しさん
2015/02/05(木) 00:14:12.11ID:SXN3g1Ol0891デフォルトの名無しさん
2015/02/05(木) 00:28:38.37ID:Iop/4SxLだよね、メンバー変数触らなきゃ大抵問題ないと思うけど...
0892デフォルトの名無しさん
2015/02/05(木) 00:49:08.62ID:l8QaN41D昔、というか今もリンク時にはC言語形式の f(X*)になっている
0893デフォルトの名無しさん
2015/02/05(木) 01:00:21.83ID:Tp9Oo/VoC言語形式の関数のシンボル名は引数自体ないんだけど
0894デフォルトの名無しさん
2015/02/05(木) 01:02:07.56ID:SXN3g1Olマングリングした名前で静的ライブラリから関数ポインタと取得して、そのままC関数としてcallできる保証なんざどこにもない
C言語形式のってのは不適切じゃないかね
0895デフォルトの名無しさん
2015/02/05(木) 01:03:17.81ID:SXN3g1Ol0896デフォルトの名無しさん
2015/02/05(木) 10:37:39.60ID:n7T33kxd0897デフォルトの名無しさん
2015/02/05(木) 21:00:31.64ID:0qNqDnpOポインタがなんとなくは理解できたと思ったんですが、
更に参照というのが出てくるとまたわからなくなりました。
ポインタと参照って何か違うんですか?
私の理解では、変数int aとポインタ変数int *bがあってb = &aとした時、
bはaの参照を持んですよね?つまりポインタは参照ってことでいいのではないでしょうか?
でもポインタと参照は別物みたいに書かれていたりして、わけがわかりません。
同じものですか?違うものですか?
0898デフォルトの名無しさん
2015/02/05(木) 21:14:42.21ID:EvPbZUKsまずはポインタに慣れポインタを理解したほうがいい
あるいは pascal 等の参照呼出しを持った簡単な言語を習得する、など。
参照変数はポインタ変数と縁が深いとはいえ、その記述方法が違う
0899デフォルトの名無しさん
2015/02/05(木) 21:17:38.58ID:thcJVwvH参照は概念
ポインターは参照を実現するためによく使われる手段
int a = 100;
int * pa = &a;
f(pa);
fの中でポインターを使って値を変えると呼び出し元のaの値も変わる。
これを「aを関数fに参照で渡ししている」と言う
0900デフォルトの名無しさん
2015/02/05(木) 21:17:47.10ID:/dPq9GRzどのくらい違うかというと
「住所」
と
「その住所を知ってる人」
くらい違う
0901デフォルトの名無しさん
2015/02/05(木) 21:22:49.56ID:osIltw0C参照は関数の引数で文字列や構造体を
渡す場合だけしか使わないなあ。
0902デフォルトの名無しさん
2015/02/05(木) 21:24:42.35ID:ccAWLvf9単語レベルで猿のように反応するお前ら
0903デフォルトの名無しさん
2015/02/05(木) 21:25:17.59ID:/dPq9GRzそうだな参照が概念だな
ポインタに限らず全ての変数はそれを持っているんだ
&変数で参照に、*でポインタが参照している実体にアクセスできるって事は理解してるんだな
なら
a=10ならaは10という実体そのものを持ってる
b=&aの後の*bも10で、bにはアドレス(お前さんが考えてるところの参照)が入ってるな
んだら、&b←これは何をあらわしてる?
参照ってのは、特別なものじゃない
ポインタとごっちゃにするものでもない
0904デフォルトの名無しさん
2015/02/05(木) 21:26:04.15ID:eDwpcQmy0905デフォルトの名無しさん
2015/02/05(木) 21:27:56.44ID:EvPbZUKs0906デフォルトの名無しさん
2015/02/05(木) 21:28:34.98ID:EvPbZUKsそれはふつうの単項 * 演算子だねえ
0907デフォルトの名無しさん
2015/02/05(木) 21:32:45.21ID:YCqdOdIuそうだよ
単項演算子*で別の変数の値にアクセスするのが参照
知らないならすっこんでていいよ
0908デフォルトの名無しさん
2015/02/05(木) 21:35:56.43ID:0qNqDnpO違いについては、教えて頂いた事をヒントに、もう少し本を読み込んで理解していこうと思います。
ちなみに、参照とは参照変数の略なんですか?
0909デフォルトの名無しさん
2015/02/05(木) 21:42:01.55ID:TOlaBAsT参照という日本語と参照変数というC++用語とがあるからなあ
上でも言われてるけど、一旦参照忘れてポインタに集中したほうがいいと思うよ
0910デフォルトの名無しさん
2015/02/05(木) 21:42:46.23ID:YCqdOdIu忘れていい
0911デフォルトの名無しさん
2015/02/05(木) 21:44:01.91ID:U3iZE77s別名ならよかったのに
0912デフォルトの名無しさん
2015/02/05(木) 21:53:50.73ID:4UAQD4bTA pointer type may be derived from a function type or an object type, called the referenced type.
A pointer type describes an object whose value provides a reference to an entity of the referenced type.
A pointer type derived from the referenced type T is sometimes called ''pointer to T''.
0913デフォルトの名無しさん
2015/02/05(木) 21:59:05.74ID:z+T6/OHe0914デフォルトの名無しさん
2015/02/06(金) 00:39:16.20ID:/qyQiT60そこにあるのは単なる記述と制約の違いでしかない
int a, b[] = { 0, 0, 0 };
*&a = 1;
*b = 2;
*( &*b + 1 ) = 3;
*( &b[1] + 1 ) = 4;
printf( "a=%d, [0]=%d, [1]=%d, [2]=%d", a, b[0], b[1], b[2] );
0915デフォルトの名無しさん
2015/02/06(金) 00:41:31.52ID:MSC8hdEj0916デフォルトの名無しさん
2015/02/06(金) 00:46:05.03ID:jSEDnOld0917デフォルトの名無しさん
2015/02/06(金) 01:10:52.25ID:/UY9BmXlというエラーが出るんですが、pragma onceもあります
なんででしょうか?
わざわざexturnしないとだめですか?
0918デフォルトの名無しさん
2015/02/06(金) 01:38:43.32ID:821S5hNPヘッダに定義を書くなよ
0919デフォルトの名無しさん
2015/02/06(金) 01:43:04.72ID:b3gwE4qmヘッダには関数のプロトタイプは置いても中身まで書かない
0920デフォルトの名無しさん
2015/02/06(金) 01:48:28.34ID:E8JTKxscpragma onceは「ひとつのcppファイル」に複数回定義が現れないようにするだけで
そもそも「複数のcppファイル」に定義が出現したら二重定義エラーになる
0921デフォルトの名無しさん
2015/02/06(金) 02:04:34.13ID:XofOsMKdそのヘッダをincludeしたソースの数だけその関数が出来る
0922デフォルトの名無しさん
2015/02/06(金) 10:17:49.10ID:MSC8hdEj逆にわかった上での釣り質問じゃないかと疑ってしまうw
0923デフォルトの名無しさん
2015/02/06(金) 11:23:11.97ID:BQfzz9oEたまに↓みたいな表記が出てきます。
((LPCREATESTRUCT)lp)->hInstance
これって結局、インスタンスハンドルなんですよね?
-> って演算子を使ったことがなくて意味がよく分からないのですが。
0924デフォルトの名無しさん
2015/02/06(金) 11:30:48.92ID:+HsTLx7S0925デフォルトの名無しさん
2015/02/06(金) 11:32:23.37ID:E8JTKxscCの基本から勉強しなおしてください
0926デフォルトの名無しさん
2015/02/06(金) 11:38:14.92ID:BQfzz9oEわかりました
0927デフォルトの名無しさん
2015/02/06(金) 14:37:47.85ID:jlh1DjPpつinline
0928デフォルトの名無しさん
2015/02/06(金) 16:20:48.87ID:9d0A7+MOint d2[8] = {0,0,0,0,0,0,0};
int i;
i = 0;
do{
++i;
d2[i] = d1[i];
}while(d2[i] != -1);
for(i = 0; i <8; i++)
cout << d2[i] << " ";
cout << '\n';
return 0;
C++ですけど、これ何処が間違い?
10, 20, 30, 40,-1 ここまでで止まるようにしたいんだけど・・・
0929デフォルトの名無しさん
2015/02/06(金) 16:27:39.27ID:eDHY2J9J++i;
こうじゃないのか
0930デフォルトの名無しさん
2015/02/06(金) 17:03:17.96ID:+ZpFuaAfWndProc の名から察するに callback 関数で
関数のポインタをとるんだけど、inline ついてても帳尻あうように
どこかでのみコード生成してくれるのかな?
0931デフォルトの名無しさん
2015/02/06(金) 17:18:52.19ID:ftnjAwrxd2[0]の処理が無いん
0932デフォルトの名無しさん
2015/02/06(金) 20:37:15.26ID:2p4GT6H2アドレス取られてたら、実体生成するんじゃなかったっけ?
0933デフォルトの名無しさん
2015/02/07(土) 08:10:03.53ID:B6nPxnuzいえ違います
inline付いてたら定義が複数見つかっても一つにまとめてくれる仕様があります
>>932
その理屈だと複数のcppでアドレス取ったらアウチだね
0934デフォルトの名無しさん
2015/02/07(土) 08:48:39.38ID:S7NDooB6i = 0;
do {
d2[i] = d1[i];
} while ( d2[i++] != -1 ) ;
0935デフォルトの名無しさん
2015/02/07(土) 10:05:05.31ID:L56gFTsW> その理屈だと複数のcppでアドレス取ったらアウチだね
なんの問題もないけど?
0936デフォルトの名無しさん
2015/02/07(土) 10:39:44.00ID:7MTAmsCU0937デフォルトの名無しさん
2015/02/07(土) 12:51:12.26ID:scHB89CY遅レスですまんが、XP(SP3)でだって今どきのマシンであればQueryPerformanceCounterで問題ないよ
リンク先の記事はいろんな条件を確かめることなしに勝手なことを書いてるだけ
0938デフォルトの名無しさん
2015/02/07(土) 13:07:12.11ID:scHB89CYhttp://stackoverflow.com/questions/7287663/queryperformancecounter-status
0939デフォルトの名無しさん
2015/02/07(土) 20:12:50.08ID:E6r0/ti/0940デフォルトの名無しさん
2015/02/07(土) 20:16:21.70ID:TwsBHqmP0941デフォルトの名無しさん
2015/02/07(土) 20:23:27.82ID:E6r0/ti/0942デフォルトの名無しさん
2015/02/07(土) 20:29:53.49ID:E6r0/ti/0943デフォルトの名無しさん
2015/02/07(土) 20:30:55.63ID:TwsBHqmPnewの使用を推奨します
0944デフォルトの名無しさん
2015/02/07(土) 20:33:12.80ID:E6r0/ti/0945デフォルトの名無しさん
2015/02/07(土) 20:52:27.19ID:wGf/Hav9情報ありがとうございます。
ググっていたら
http://stackoverflow.com/questions/5296990/queryperformancecounter-and-overflows
見付けたのですが、こっちだとQueryPerformanceCounterは長時間の計測には
向いていないのでGetTickCount or GetSystemTimeが良いと書いてあるようなの
ですが、結局、どっちが正しいのでしょうか?
0946デフォルトの名無しさん
2015/02/07(土) 21:42:57.06ID:Hof4fFat0947デフォルトの名無しさん
2015/02/07(土) 22:10:10.94ID:scHB89CYオーバーフローになるくらいの長時間ケースは論外として
確度の話だったらハード依存するとしか言えないと思う
普通のPCのプロセッサやバスクロックに使ってる発振器なんてせいぜい周波数確度50ppmとかだし
50ppmなら1秒で50マイクロ秒のズレを覚悟しなきゃいけないことになる
長時間をなるべく正確に図りたいならマルチメディア系のタイマーがいいんじゃないかな(たぶん)
マルチメディアのハードウエアは比較的確度の良い発振器使っている事が多そうだから
0948デフォルトの名無しさん
2015/02/08(日) 06:52:02.33ID:LUl61OMZ> 時刻同期された時点でアウト
W32Time
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W32Time\Parameters
の "Type"(REG_SZ)に "NoSync"(時刻の同期を行わない) を設定して
時刻同期を止めて処理を実行し、終わったら"Type"の値を元に戻す・・・のはダメ?w
0949デフォルトの名無しさん
2015/02/08(日) 09:17:19.00ID:p5pYedXEtemplate <typename T> T func( T arg );
Tは組込み整数型(short,int,long...)だけ有効としたいのでそれらの型のみ特殊化しようと
していますが、これを一括で記述することはできませんか?
今は仕方なく、型ごとに記述しています。
template <> int func( int arg ) {
// 記述同じ
}
template <> long func( long arg ) {
// 記述同じ
}
0950デフォルトの名無しさん
2015/02/08(日) 10:08:38.46ID:FDmThcdJhttp://ideone.com/IWAnvz
0951デフォルトの名無しさん
2015/02/08(日) 10:15:09.32ID:WLLuhFHThttp://melpon.org/wandbox/permlink/gkJI4gRGRsltA79N
0952デフォルトの名無しさん
2015/02/08(日) 10:16:42.82ID:WLLuhFHTならstd::is_integralだ
0953デフォルトの名無しさん
2015/02/08(日) 10:55:25.50ID:p5pYedXEありがとうございました。std::enable_ifをこう使えばいいんですね。試してみます。
0954949
2015/02/08(日) 14:00:58.82ID:p5pYedXEついでに教えて欲しいんですが、このような特定複数の型にマッチするテンプレートを書いて
その実装をソース側に隠して明示的インスタンス化しようとした場合、同様に簡潔に記述する
方法はあるんでしょうか?
それともこの場合は、具体的な型ごとにインスタンス化しないとならないでしょうか。
0955デフォルトの名無しさん
2015/02/08(日) 18:49:29.57ID:IFsGlgey荒らしの立てたスレはゴミ溜めと化してるし
0956デフォルトの名無しさん
2015/02/09(月) 14:11:35.22ID:3ys1NOC1scientific
これなんて、読んでる?
0957デフォルトの名無しさん
2015/02/09(月) 14:30:48.43ID:ETm8i+dCサイエンティフィック
以外の読み方があるんか?
0958デフォルトの名無しさん
2015/02/09(月) 15:34:06.79ID:3ys1NOC10959デフォルトの名無しさん
2015/02/09(月) 19:29:19.16ID:dbrw/Pr1const char* p = "テスト";
(1) if (string(p) == "テスト")
(2) if (strcmp(p, "テスト") == 0)
(3) if (p == "テスト") // warning C4130: '==' : 文字列定数のアドレスで論理演算が行われました。
どの方法でも比較結果は等しくなったのですが、
(3)は警告が出るにもかかわらず等しいと判定できますが、何故でしょうか?
警告が出ると言う事は、(3)のような比較はしてはいけないのでしょうか?
0960デフォルトの名無しさん
2015/02/09(月) 19:35:52.65ID:ZjLVYYsdそこの比較でtrueが帰ったのはたまたま文字列リテラルの先頭アドレスが同じだっただけです
0961デフォルトの名無しさん
2015/02/09(月) 19:57:21.96ID:sBN76GX20962デフォルトの名無しさん
2015/02/09(月) 19:59:10.78ID:BDPeZr7+1回目の "テスト" と 2回目の "テスト" が同じものを指すかどうかは保障がない
(別の場所に テスト テスト ってそれぞれ記憶しているかもしれない
コンパイラによっては、それを1個にまとめてくれることもあるけど
それを前提としたコードを書くべきではない
(3) の右辺の "テスト" が記憶されているアドレスを比較するのはナンセンスだよ と警告してくれている
0963デフォルトの名無しさん
2015/02/09(月) 19:59:43.11ID:dbrw/Pr1レスありがとうございました。理解できました。
0964デフォルトの名無しさん
2015/02/11(水) 09:56:02.05ID:kE4UGdJhコンパイラの最適化がなくなるの?
0965デフォルトの名無しさん
2015/02/11(水) 10:41:42.40ID:fznki0OC変数ではない
文字列リテラルだ
0966デフォルトの名無しさん
2015/02/11(水) 11:45:40.86ID:zO3T1ON+そもそもリテラルそのものを変更してはならない
配列をリテラルで初期化するなり、確保したメモリにリテラルの内容を転写するなり
そうしてから変更せんと
0967デフォルトの名無しさん
2015/02/11(水) 12:53:36.80ID:aYb/ZX4Zソースコード中に複数出てくる同じ文字列はコンパイラが
単一の実体にまとめちゃっても良いことになってる。
大抵はコンパイル時のオプションで抑制もできる。
0968デフォルトの名無しさん
2015/02/11(水) 15:45:46.19ID:ZyeSSwOBなるほど。
テスト
http://ideone.com/dIyERC
0969デフォルトの名無しさん
2015/02/13(金) 21:01:55.21ID:Ds6cciQsA* p=new A();
と宣言すると、Aのサイズ分メモリに領域が確保されると思うのですが、それならポインタ使わないで
A p;
と宣言した場合と、使われるメモリ領域は同じではないですか?
むしろ、ポインタを格納する領域も作った分ちょっとポインタ使った方が容量増える気がします。
考え方間違ってますでしょうか?
0970デフォルトの名無しさん
2015/02/13(金) 21:33:40.26ID:Qz0zAdy2合ってる、
ポインタも所詮アドレス用の変数なんで、インスタンスの他にポインタ分もメモリ食う
0971デフォルトの名無しさん
2015/02/13(金) 21:35:37.71ID:lpJSL/lfプロセスが生きてる間存在するなら後者の方がいい
0972デフォルトの名無しさん
2015/02/13(金) 21:40:34.81ID:2hoeGKOs関数の内部でA p;と宣言したpを呼出元に返す場合、どうすればいいでしょう。
Aはとても大きく、コピーすると計算資源の無駄になる場合はどうすれば効率いいでしょうか。
0973デフォルトの名無しさん
2015/02/13(金) 21:47:52.96ID:wdSxf+0q0974デフォルトの名無しさん
2015/02/13(金) 22:11:02.08ID:F5dloNJQ0975デフォルトの名無しさん
2015/02/13(金) 22:42:13.84ID:G7jPEu4l微妙に違う
A a;
としたらスタックに置かれる。
A* p =new A();
としたらsizeof(A)の分ヒープに置かれてsizeof(A*)の分スタックに置かれる。
スタックとヒープの違いはググれ
0976デフォルトの名無しさん
2015/02/14(土) 02:49:22.62ID:+bNdvInf呼び出しもとから p のアドレスをもらって呼び出し先で new して p に入れる
http://codepad.org/orXVBdNn
0977デフォルトの名無しさん
2015/02/14(土) 02:55:58.71ID:c5GE7VHuネタだよな?
0978デフォルトの名無しさん
2015/02/14(土) 03:01:53.48ID:+bNdvInf0979デフォルトの名無しさん
2015/02/14(土) 03:04:18.75ID:C4CV/7ib0980デフォルトの名無しさん
2015/02/14(土) 03:04:32.31ID:c5GE7VHu0981デフォルトの名無しさん
2015/02/14(土) 03:07:35.91ID:a6xGr1RH0982デフォルトの名無しさん
2015/02/14(土) 03:10:14.30ID:+bNdvInfたしかにシクっった
http://ideone.com/oJGfP8
>>972
訂正します
0983デフォルトの名無しさん
2015/02/14(土) 03:14:02.72ID:c5GE7VHuhogeはいったいどこのポインタなんだ。一体どこのメモリを書き換えて何をdeleteしてるんだ、恐ろしい
0984デフォルトの名無しさん
2015/02/14(土) 03:14:32.96ID:c5GE7VHu0985デフォルトの名無しさん
2015/02/14(土) 03:19:32.22ID:a6xGr1RHネタじゃないなら人に教えようと思わないでくれ
0986デフォルトの名無しさん
2015/02/14(土) 03:52:23.04ID:vF+NOi+H0987デフォルトの名無しさん
2015/02/14(土) 04:05:25.87ID:GOyPmnEBおめーのようなド底辺が参入してきているのか、この業界も落ちるところまで落ちたな。
0988デフォルトの名無しさん
2015/02/14(土) 04:18:18.63ID:5K1xCRmV以前はホゲコピペでスレを荒らしました
よく素人のふりをして質問して
後から回答者を煽ったりします
韓国にこだわりがある模様
0989デフォルトの名無しさん
2015/02/14(土) 07:29:28.76ID:TmPsoaDY0990デフォルトの名無しさん
2015/02/14(土) 09:40:05.17ID:5BqTjtvr> } while ( d2[i++] != -1 ) ;
よく考えたら、よくある
while ( *dst++ = *src++ );
ってundefined behaviorだよね
0991デフォルトの名無しさん
2015/02/14(土) 09:52:50.69ID:fXUsxwGxむしろ落ちてくれると思っている方がお花畑
そう言う人はCに剥いてない
0992デフォルトの名無しさん
2015/02/14(土) 09:56:06.96ID:0HcNv3Vt何故に?
0993デフォルトの名無しさん
2015/02/14(土) 10:04:45.63ID:5BqTjtvr式の結果は使われなくても範囲外になったら
いけないんじゃなかったっけ
int a[10];
a-1; // NG
a+9; // ok
a+10; // 一つ後ろはok
a+11; // NG
0994デフォルトの名無しさん
2015/02/14(土) 10:15:24.94ID:C4CV/7ibそんなわけないだろ
0995デフォルトの名無しさん
2015/02/14(土) 10:18:34.88ID:+bNdvInf最後のひとつのその次は OK だったはず
0996デフォルトの名無しさん
2015/02/14(土) 10:28:21.35ID:Be2NMpD8最近では、そんなできて当然なことがエラーになるの?(´・ω・`)
Cでも?C++だけ?今までつかったコンパイラではワーニングすら
出るのはなかったけど?(´・ω・`)
0997デフォルトの名無しさん
2015/02/14(土) 10:39:31.30ID:c5GE7VHuただし、
while ( *dst++ = *src++ );
の場合は、デリファレンスと代入を行っている以上、*srcが0になる箇所までは範囲内だろうから、最終的なポインタの位置は最後の一つの次になる
0998デフォルトの名無しさん
2015/02/14(土) 10:40:10.80ID:5BqTjtvr勘違いしたすまぬ
0999デフォルトの名無しさん
2015/02/14(土) 10:49:11.74ID:wzIej5FK1000デフォルトの名無しさん
2015/02/14(土) 10:49:49.31ID:OXl2Mf25それコンパイルエラーにならないの?
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。