トップページ > プログラム > 2015年12月08日 > y1mdlUK+

書き込み順位&時間帯一覧

26 位/142 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000001000001002



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
C++相談室 part121 [無断転載禁止]©2ch.net
スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net

書き込みレス一覧

C++相談室 part121 [無断転載禁止]©2ch.net
101 :デフォルトの名無しさん[sage]:2015/12/08(火) 15:22:24.80 ID:y1mdlUK+
C++11 だと 1.10 Multi-threaded executions and data races [intro.multithread] (p. 11) かな?
>> 96
> コンパイラがコードを吐く際に、変数が他のスレッドから書き換えられる可能性など考慮しだしたら最適化が全く成立しない
これは正しい
> 同一アドレスへの複数スレッドのアクセスが未定義動作ということ
これも >>99 が示してくれたように正しい
> コンパイラが妥当な最適化を行えているということは矛盾する
これは正しくない
「同一アドレスへの複数スレッドのアクセスが未定義動作」だからこそ、
コンパイラはそれを無視して最適化してよいことになる
その結果として競合による未定義動作が起こり得るけど、それは仕様通りですよ、ということ
……という理解であってるよね?
スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net
48 :デフォルトの名無しさん[sage]:2015/12/08(火) 21:33:55.11 ID:y1mdlUK+
以下のコードについて、Win+Mingw 上での結果と Ubuntu 上での結果が異なります

#include <iostream>
#include <fstream>
#include <system_error>
int main () {
using namespace std;
ifstream is;
is.exceptions(ifstream::failbit | ifstream::badbit);
try { is.open("xxx"); /* 存在しないファイル */ }
catch (ifstream::failure e) { cerr << "ifstream::failure" << endl; }
catch (system_error e) { cerr << "system_error" << endl; }
catch (exception e) { cerr << "exception" << endl; }
catch (...) { cerr << "other_error" << endl; }
return 0;
}

Win+Mingw
$ g++ --version
g++.exe (tdm64-1) 5.1.0
$ g++ -std=c++14 a.cc && ./a
exception

Ubuntu
$ g++ --version
g++ (Ubuntu 4.9.2-10ubuntu13) 4.9.2
$ g++ -std=c++14 a.cc && ./a.out
ifstream::failure

Windows 側で ifstream::failure や system_error を捕捉できていないのはなぜでしょうか?


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。