次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part133
http://mevius.5ch.net/test/read.cgi/tech/1511509970/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
C++相談室 part134
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 5fcb-Q2eK)
2018/01/20(土) 09:05:42.21ID:mJKRg6iz0398デフォルトの名無しさん (アウアウカー Sabb-5mf3)
2018/03/03(土) 21:19:46.86ID:oo1zjTPVa C++の文字列、u16やu32stringとか乱立してるけど今時TCHARとか使わないでしょうか?
string,wstring,u16string,u32string...どれか決め打ち?
string,wstring,u16string,u32string...どれか決め打ち?
399デフォルトの名無しさん (ワッチョイ 8723-WWZl)
2018/03/03(土) 21:37:46.21ID:iGrPHQq30 主に使ってるライブラリ/フレームワークに合わせれば?
何でもいいなら multibyte で utf-8 一択だろう
ucs2 (16bit) にしても ucs4 (32bit) にしてもどうせ
合字とかで1コードポイント1文字にならないから意味ないし
コンテナは string でも何でも好きなものを
何でもいいなら multibyte で utf-8 一択だろう
ucs2 (16bit) にしても ucs4 (32bit) にしてもどうせ
合字とかで1コードポイント1文字にならないから意味ないし
コンテナは string でも何でも好きなものを
400はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI)
2018/03/03(土) 21:52:22.75ID:uc6Z/AdW0 どうやろな?
Windows だと API が UTF-16 前提だからそれで揃えるってのは悪くない選択だと思うし。
Windows だと API が UTF-16 前提だからそれで揃えるってのは悪くない選択だと思うし。
401デフォルトの名無しさん (ワッチョイ 5f7e-m1UI)
2018/03/03(土) 21:55:03.34ID:e0EB+SLu0 >>398
TCHARはcharとwchar_tをvisual studioのプロジェクトの設定で切り替えてtypedefしてる型だ
マイクロソフトのライブラリの一部
u16stringとu32stringはstd::basic_string<char16_t>とstd::basic_string<char32_t>のエイリアス
UTF-16とUTF-32の文字列を扱うクラスで標準ライブラリの一部
そもそもどっちかというものではない
std::basic_string<TCHAR>とか使ってもいい
TCHARはcharとwchar_tをvisual studioのプロジェクトの設定で切り替えてtypedefしてる型だ
マイクロソフトのライブラリの一部
u16stringとu32stringはstd::basic_string<char16_t>とstd::basic_string<char32_t>のエイリアス
UTF-16とUTF-32の文字列を扱うクラスで標準ライブラリの一部
そもそもどっちかというものではない
std::basic_string<TCHAR>とか使ってもいい
402デフォルトの名無しさん (ワッチョイ dfbd-lEE9)
2018/03/03(土) 22:02:34.74ID:i5AAIiVZ0 OpenCVのビルドぐらいCMakeでGUIでできる
403デフォルトの名無しさん (ワッチョイ dfbd-lEE9)
2018/03/03(土) 22:07:02.05ID:i5AAIiVZ0 >std::basic_string<TCHAR>とか使ってもいい
ほんとそれ
ていうかWin32APIでサポートされるうちはやっぱマルチバイトが無難
ほんとそれ
ていうかWin32APIでサポートされるうちはやっぱマルチバイトが無難
404デフォルトの名無しさん (ワッチョイ 4781-atej)
2018/03/03(土) 22:12:10.73ID:q1dNIabI0 ShiftJisなんて廃止して、UTF8に統一してしまえば良かったよね
405デフォルトの名無しさん (ワッチョイ 078a-Jyeh)
2018/03/03(土) 22:19:12.96ID:/0Rk5gcF0 UTFはソートのコストが高いから痛し痒しだけどね
SJISはその点は優秀かと
SJISはその点は優秀かと
406デフォルトの名無しさん (ワッチョイ df4c-jQxp)
2018/03/03(土) 22:38:49.13ID:pbvBV+5A0 Windows10はutf8モードにできたような
407はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI)
2018/03/03(土) 22:56:38.78ID:uc6Z/AdW0 文字コードを統一したところでロケールの切替えはどうせ必要なわけだし、
内部的な処理が UNICODE に統一されたので良しとするしかなかろ。
内部的な処理が UNICODE に統一されたので良しとするしかなかろ。
408デフォルトの名無しさん (ワッチョイ 4781-atej)
2018/03/03(土) 23:43:29.67ID:q1dNIabI0 utf8に統一したら、ロケールの切替って表示する文字列の言語を決める位の意味しか無いのではないかな
異なる言語の文字列でもそのまま字化けせずに表示出来た方が都合が良いように思うけど
異なる言語の文字列でもそのまま字化けせずに表示出来た方が都合が良いように思うけど
409はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI)
2018/03/04(日) 00:38:00.37ID:R9gQD4Ga0 Windows はもう 20 年以上前から Unicode 化はやってるんだってば。
UNICODE 版の API を正しく使う限り文字化けしない。
フォントの設定とかで化けることはあるかもしれんけど、
それも今はフォントリンクとかでおおよそ上手いこと処理してまうしな。
UNICODE 化できていない今までに作られたカスなアプリが消し去れないし、
カスなアプリのために ANSI 版の API (の挙動を制御するためのコードページの切替えの仕組み)
は残しておかなきゃならないけど、
Unicode への統一そのものは出来てるから満足するしかない。
っていう話ね。
UNICODE 版の API を正しく使う限り文字化けしない。
フォントの設定とかで化けることはあるかもしれんけど、
それも今はフォントリンクとかでおおよそ上手いこと処理してまうしな。
UNICODE 化できていない今までに作られたカスなアプリが消し去れないし、
カスなアプリのために ANSI 版の API (の挙動を制御するためのコードページの切替えの仕組み)
は残しておかなきゃならないけど、
Unicode への統一そのものは出来てるから満足するしかない。
っていう話ね。
410デフォルトの名無しさん (ワッチョイ bfe7-s382)
2018/03/04(日) 00:59:55.95ID:LharAyAs0 だったらVisualStudioで作ったソースファイルのデフォルトがShiftJIS固定なのをそろそろなんとかしてくれよ
411はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI)
2018/03/04(日) 01:01:33.87ID:R9gQD4Ga0 せやな。
412デフォルトの名無しさん (ワッチョイ dfbd-lEE9)
2018/03/04(日) 01:07:55.85ID:BtVPmkEs0 LinuxとかのシステムコールもUnicode化されたら考えるわアデューノシ
413デフォルトの名無しさん (ワッチョイ 079b-esDK)
2018/03/04(日) 01:14:01.78ID:fY1aJvVU0 >>410
2017で治ったんじゃなかったか
2017で治ったんじゃなかったか
414デフォルトの名無しさん (ワッチョイ dfbd-lEE9)
2018/03/04(日) 01:15:23.20ID:BtVPmkEs0 だいたいwchar_tとかcharの倍容量を食うじゃん?
2が3になるとかならまだしも1が2になるというのは精神的にインパクトがデカイ
L"Hello World!"のバイナリをダンプしてみたらトラウマを抱え込むレヴェル
というのもあるし他環境とのソースコード共通化も視野に入れる場合やっぱマルチバイトしか…
2が3になるとかならまだしも1が2になるというのは精神的にインパクトがデカイ
L"Hello World!"のバイナリをダンプしてみたらトラウマを抱え込むレヴェル
というのもあるし他環境とのソースコード共通化も視野に入れる場合やっぱマルチバイトしか…
415デフォルトの名無しさん (ワッチョイ dfe1-9jF/)
2018/03/04(日) 01:35:20.32ID:pARrwnK20 WindowsのUNICODE版APIはUTF-8と相性が悪いからクソ
416はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI)
2018/03/04(日) 01:39:19.42ID:R9gQD4Ga0 せやろか?
内部表現として使う文には UTF-16 って良いと思うけどな。
UTF-8 との間なら変換コストも大したことないし。
内部表現として使う文には UTF-16 って良いと思うけどな。
UTF-8 との間なら変換コストも大したことないし。
417デフォルトの名無しさん (ワッチョイ 8723-WWZl)
2018/03/04(日) 02:20:02.75ID:8pLLmBBd0 >>416
iOS / macOS / Windows / Java と多くのプラットフォームの
API で文字列としてUTF-16 が使われてるから割と使うけど、
近年多用される絵文字とかが全然1文字1符号にならんので
ロジックを基準する上ではUTF-8より便利ってわけでもない。
文字列の処理を描くときは合字以外は1文字1符号になるUCS4 の方が良い。
iOS / macOS / Windows / Java と多くのプラットフォームの
API で文字列としてUTF-16 が使われてるから割と使うけど、
近年多用される絵文字とかが全然1文字1符号にならんので
ロジックを基準する上ではUTF-8より便利ってわけでもない。
文字列の処理を描くときは合字以外は1文字1符号になるUCS4 の方が良い。
418デフォルトの名無しさん (ワッチョイ 5f7e-m1UI)
2018/03/04(日) 02:23:18.11ID:FSOQNU6I0 なぜ世界中の頭脳を集結させても完璧な文字コードは作れないのか
419デフォルトの名無しさん (ワッチョイ dfbd-lEE9)
2018/03/04(日) 02:28:31.88ID:BtVPmkEs0 x86アーキテクチャーがRISC-Vに置き換わったら考えるわノシ
420デフォルトの名無しさん (ワッチョイ dfbd-lEE9)
2018/03/04(日) 02:42:05.74ID:BtVPmkEs0 ていうかコルモゴロフ複雑性が計算可能関数だったら考えるわノシ
421デフォルトの名無しさん (ワッチョイ df34-CuRu)
2018/03/04(日) 02:53:03.62ID:QKjmCs/V0 韓国がUNICODEにすごい文字数予約済みにしてあるとか聞いたことある
422デフォルトの名無しさん (ワッチョイ 7feb-Vmra)
2018/03/04(日) 03:02:28.08ID:ymM0nha90 あの言語動的に文字生成でもしないと無駄多杉だろ
423はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI)
2018/03/04(日) 03:02:39.39ID:R9gQD4Ga0424デフォルトの名無しさん (ワッチョイ 8723-WWZl)
2018/03/04(日) 03:56:38.94ID:8pLLmBBd0 >>423
UTF-16 だとサロゲートペアが出てくるからマルチバイトがマルチワードになるだけ
ucs4 だとそれが要らなくて符合とコードポイントが1:1対応になるんだよ。
何年か前まではサロゲートペア?なにそれおいしいの?でも済んでたけど
今の時代それは無理だし
UTF-16 だとサロゲートペアが出てくるからマルチバイトがマルチワードになるだけ
ucs4 だとそれが要らなくて符合とコードポイントが1:1対応になるんだよ。
何年か前まではサロゲートペア?なにそれおいしいの?でも済んでたけど
今の時代それは無理だし
425デフォルトの名無しさん (ワッチョイ 8723-WWZl)
2018/03/04(日) 04:09:09.92ID:8pLLmBBd0 要は
utf-8、utf-16 → 1符合 ≠ 1コードポイント ≠ 1文字
ucs4 → 1符合 = 1コードポイント ≠ 1文字
だから完全自作の文字列処理ではucs4が楽だよという意見でした
テキストなんてたいしてメモリ食わないしね
おしまい
utf-8、utf-16 → 1符合 ≠ 1コードポイント ≠ 1文字
ucs4 → 1符合 = 1コードポイント ≠ 1文字
だから完全自作の文字列処理ではucs4が楽だよという意見でした
テキストなんてたいしてメモリ食わないしね
おしまい
426デフォルトの名無しさん (ワッチョイ 5f7e-m1UI)
2018/03/04(日) 04:09:59.70ID:FSOQNU6I0 charset_cast<utf_8>()みたいなの欲しい
427はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI)
2018/03/04(日) 08:42:48.43ID:R9gQD4Ga0 おっと、 u16string のイテレータはサロゲートペアは解決してくれないのか。
まあそれも小さなラッパを作ればどうとでもなる。
まあそれも小さなラッパを作ればどうとでもなる。
428デフォルトの名無しさん (ワッチョイ bfe7-s382)
2018/03/04(日) 09:34:29.91ID:LharAyAs0 UTF16でサロゲートでガチャガチャやるくらいならUTF8でちゃんとやった方が実り多いし
そんなんやりたくないならUTF32使えばいいし
中途半端だよねUTF16
そんなんやりたくないならUTF32使えばいいし
中途半端だよねUTF16
429デフォルトの名無しさん (ワッチョイ df6e-m1UI)
2018/03/04(日) 09:38:06.05ID:ZPPAxORI0 ワイドのようで実はマルチ
430デフォルトの名無しさん (アウアウカー Sabb-5mf3)
2018/03/04(日) 10:55:23.96ID:kJ02m0gha どこかでみたけど歴史的にはutf32やutf16よりutf8が新しいんだろ?
431デフォルトの名無しさん (ワッチョイ 078a-Jyeh)
2018/03/04(日) 12:59:59.04ID:hIgSiiXH0 オリジナルのXEROXのコードへの先祖返りではないかな?
432デフォルトの名無しさん (マクド FFbb-x7J7)
2018/03/04(日) 14:09:11.62ID:GeBypOU0F visualstudio2017でBoost.Testを試したいのですがうまく行きません。
Nugetでboost-vc141をインストールしてテストプロジェクトをWindowsコンソールアプリケーションとして
追加し、Helloworld的なテストプログラムを書きました。
ビルドは通るのですが、テストエクスプローラーにテストが認識されません。
#include "stdafx.h"
#define BOOST_TEST_MODULE MyTest
#include <boost/test/included/unit_test.hpp>
BOOST_AUTO_TEST_CASE(my_boost_test) {
const int x = 1;
BOOST_CHECK(x == 1);
BOOST_CHECK(x != 1);
}
VisualStudio2017のバージョンは15.5.7で
「Boost.Testのテスト アダプター」はデフォルトでインストールされるようになっていたので
インストールされています。
Nugetでboost-vc141をインストールしてテストプロジェクトをWindowsコンソールアプリケーションとして
追加し、Helloworld的なテストプログラムを書きました。
ビルドは通るのですが、テストエクスプローラーにテストが認識されません。
#include "stdafx.h"
#define BOOST_TEST_MODULE MyTest
#include <boost/test/included/unit_test.hpp>
BOOST_AUTO_TEST_CASE(my_boost_test) {
const int x = 1;
BOOST_CHECK(x == 1);
BOOST_CHECK(x != 1);
}
VisualStudio2017のバージョンは15.5.7で
「Boost.Testのテスト アダプター」はデフォルトでインストールされるようになっていたので
インストールされています。
433デフォルトの名無しさん (ワッチョイ a7b3-m1UI)
2018/03/06(火) 00:41:37.37ID:MSLc23us0 標準ライブラリを前方宣言にすることに意味ってありますか?
434デフォルトの名無しさん (ワッチョイ 677f-m1UI)
2018/03/06(火) 00:45:13.63ID:jqoml9jL0 メイヤーズは普通にインクルードしろって言ってた
435デフォルトの名無しさん (ワッチョイ dfcb-pwu8)
2018/03/06(火) 01:45:01.96ID:RorZBCxf0 >>434
それどこに書いてあるの?
それどこに書いてあるの?
436デフォルトの名無しさん (アウアウオー Sa9f-JHL/)
2018/03/06(火) 06:16:57.53ID:HL6NWtm0a newした配列がいつの間にか解放されてて、
プログラムの最後でdeleteすると必ずアクセスエラーで落ちるんですが、
newは勝手に解放されることあるんですか?
プログラムの最後でdeleteすると必ずアクセスエラーで落ちるんですが、
newは勝手に解放されることあるんですか?
437デフォルトの名無しさん (ワッチョイ df33-k3ZN)
2018/03/06(火) 07:19:59.92ID:18YefqDd0 >>436 どっかで未定義動作に堕ちてるならそんな結果になることもあるだろね。
438デフォルトの名無しさん (ワッチョイ bfe7-s382)
2018/03/06(火) 07:39:27.47ID:YXZKPZh60 ・どっかでメモリの取り扱い間違えてnewの管理情報を踏んづけて壊してる
・unique_ptrやshared_ptr、その他スマートポインタ的なものに理解せずに渡してる
多分このどっちか
・unique_ptrやshared_ptr、その他スマートポインタ的なものに理解せずに渡してる
多分このどっちか
439デフォルトの名無しさん (ワッチョイ 5f7e-m1UI)
2018/03/06(火) 07:56:08.66ID:4Jw7uGdF0 ポインタがnewで帰ってきたアドレスと違う可能性
440デフォルトの名無しさん (ワッチョイ e75b-m1UI)
2018/03/06(火) 11:04:41.26ID:PuW1uuBL0441デフォルトの名無しさん (ワッチョイ df60-k3ZN)
2018/03/06(火) 13:48:19.62ID:xvhpcg6j0442デフォルトの名無しさん (ワッチョイ df60-k3ZN)
2018/03/06(火) 13:50:16.42ID:xvhpcg6j0443デフォルトの名無しさん (ワッチョイ 7fcc-wl/W)
2018/03/06(火) 15:12:07.82ID:p6GeX8860 ファイル分割をしてみたく、プログラムをヘッダファイルとcppファイルに分割しようと挑戦したのですがよくわからないエラーが出まくります・・
プログラム超初心者なので凄い初歩的な部分を間違えているかもしれません・・・
エラーですが、ヘッダファイルの方で
'vector':'std'のメンバーではありません
'vector':定義されていない識別子です
'string':定義されていない識別子です
'cv': 識別子がクラス名でも名前空間名でもありません。
'Mat':定義されていない識別子です
'ofstream':'std'のメンバーではありません
'ofstream':定義されていない識別子です
みたいなエラーが出ます。
ヘッダファイルは、二重インクルードガードと関数のプロトタイプ宣言しかしていないのですが
上のようにそ、のプロトタイプ宣言の型とかに対してのエラーが出まくります
何かヘッダファイルに付けたほうがいいのでしょうか?
分かる方がいたら、教えていただけますでしょうか。
ちなみに、visual studio で作業していて、プロジェクトはコンソールアプリケーションで作っています。
もしかして、自分でmakefileとかを作る必要があるのでしょうか?
プログラム超初心者なので凄い初歩的な部分を間違えているかもしれません・・・
エラーですが、ヘッダファイルの方で
'vector':'std'のメンバーではありません
'vector':定義されていない識別子です
'string':定義されていない識別子です
'cv': 識別子がクラス名でも名前空間名でもありません。
'Mat':定義されていない識別子です
'ofstream':'std'のメンバーではありません
'ofstream':定義されていない識別子です
みたいなエラーが出ます。
ヘッダファイルは、二重インクルードガードと関数のプロトタイプ宣言しかしていないのですが
上のようにそ、のプロトタイプ宣言の型とかに対してのエラーが出まくります
何かヘッダファイルに付けたほうがいいのでしょうか?
分かる方がいたら、教えていただけますでしょうか。
ちなみに、visual studio で作業していて、プロジェクトはコンソールアプリケーションで作っています。
もしかして、自分でmakefileとかを作る必要があるのでしょうか?
444片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdff-dixK)
2018/03/06(火) 15:14:49.26ID:W0MQjqG0d ヘッダーの方で
#include <vector>
などが足りないのでは。
ヘッダーは、自己完結にした方がいいらしい。
#include <vector>
などが足りないのでは。
ヘッダーは、自己完結にした方がいいらしい。
445デフォルトの名無しさん (ワッチョイ 7fcc-1LYG)
2018/03/06(火) 15:40:05.75ID:p6GeX8860 よく見たら、自分の参考にしていたページでヘッダファイルのincludeは最小限に抑えると書いていました…
てっきり、ヘッダファイルではincludeはしないものなのかと…
最小限というのは、エラーが回避できるstdio.hとかの最小限のファイルだけヘッダでincludeして、他のmath.hなどはcppファイルでincludeすればいい感じですか?
てっきり、ヘッダファイルではincludeはしないものなのかと…
最小限というのは、エラーが回避できるstdio.hとかの最小限のファイルだけヘッダでincludeして、他のmath.hなどはcppファイルでincludeすればいい感じですか?
446片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdff-dixK)
2018/03/06(火) 15:50:38.20ID:W0MQjqG0d 最小限というのは、コンパイル時間、ビルド時間を短縮するためだから、小さなプログラムでは気にする必要はない。
cppとhppで#includeを分けるというのはよくあることだ。
cppとhppで#includeを分けるというのはよくあることだ。
447デフォルトの名無しさん (ワッチョイ 7fcc-1LYG)
2018/03/06(火) 16:05:55.81ID:p6GeX8860 ありがとうございます!
448デフォルトの名無しさん (ワッチョイ 6793-fJrP)
2018/03/06(火) 16:16:08.19ID:r6wtBatS0449デフォルトの名無しさん
2018/03/06(火) 17:54:41.92 Cソースのincludeの位置にヘッダファイルの中身を貼り付けたときにコンパイルできなきゃだめ
たぶんCソースの中で他のincludeよりも前に新しいヘッダファイルのincludeを書いてるんだろう
たぶんCソースの中で他のincludeよりも前に新しいヘッダファイルのincludeを書いてるんだろう
450デフォルトの名無しさん (ワッチョイ 7fcc-1LYG)
2018/03/06(火) 18:15:37.24ID:p6GeX8860451デフォルトの名無しさん (アウアウオー Sa9f-JHL/)
2018/03/06(火) 22:17:21.07ID:i8Fah5dFa >>438
前者っぽいでした
前者っぽいでした
452デフォルトの名無しさん (アウアウウー Sa2b-wl/W)
2018/03/06(火) 23:34:50.60ID:pZOZvbRza C++のリファレンスとかで[first,last)というふうに左右で括弧が違う表記があるんだけど、これはIteratorに関しての表記ですか?
453デフォルトの名無しさん (ワッチョイ df60-k3ZN)
2018/03/06(火) 23:42:46.07ID:xvhpcg6j0454デフォルトの名無しさん (ワッチョイ 07eb-n++H)
2018/03/06(火) 23:43:09.96ID:ey0B6I8l0455デフォルトの名無しさん (ワッチョイ a7b3-m1UI)
2018/03/06(火) 23:47:04.41ID:MSLc23us0 https://ttsuki.github.io/styleguide/cppguide.ja.html#Forward_Declarations
前方宣言ってしたほうがいいのか、しないほうがいいのかどっちなんですかね
前方宣言ってしたほうがいいのか、しないほうがいいのかどっちなんですかね
456デフォルトの名無しさん (アウアウウー Sa2b-wl/W)
2018/03/06(火) 23:50:38.84ID:pZOZvbRza >>453,454 数学でしたか!勉強になります。
457デフォルトの名無しさん (ワッチョイ 2723-SQy9)
2018/03/07(水) 00:29:35.52ID:+JS1hm360 mutex g_Mtx;
int g_Val = 0;
int Func( int A, int B )
{
int Val = A * B;
lock_guard<mutex> Lock( g_Mtx );
return g_Val = Val;
}
void ThreadFunc0()
{
int Val = Func( 2, 3 );
// Valを参照する処理
}
void ThreadFunc1()
{
lock_guard<mutex> Lock( g_Mtx );
// g_Valを参照する処理
}
上記のようなスレッド関数が非同期に実行されるとき、
Func()はスレッドセーフ(g_Val書き換え中に参照されない)でしょうか?
(1)lock_guard<mutex>によるミューテックスロック
(2)g_Valの書き換え
(3)戻り値を呼び出し元スレッドにコピー(あるいはムーブ)
(4)lock_guard<mutex>がスコープから外れアンロック
というシーケンスを期待しています。
int g_Val = 0;
int Func( int A, int B )
{
int Val = A * B;
lock_guard<mutex> Lock( g_Mtx );
return g_Val = Val;
}
void ThreadFunc0()
{
int Val = Func( 2, 3 );
// Valを参照する処理
}
void ThreadFunc1()
{
lock_guard<mutex> Lock( g_Mtx );
// g_Valを参照する処理
}
上記のようなスレッド関数が非同期に実行されるとき、
Func()はスレッドセーフ(g_Val書き換え中に参照されない)でしょうか?
(1)lock_guard<mutex>によるミューテックスロック
(2)g_Valの書き換え
(3)戻り値を呼び出し元スレッドにコピー(あるいはムーブ)
(4)lock_guard<mutex>がスコープから外れアンロック
というシーケンスを期待しています。
458デフォルトの名無しさん (ワッチョイ dfbd-lEE9)
2018/03/07(水) 00:29:47.60ID:6+ILModc0 endならともかくlastは区間内の最後の要素なんじゃ…
459デフォルトの名無しさん (アウアウウー Sa2b-m1UI)
2018/03/07(水) 10:09:55.97ID:ukyKg6LAa 基本的な質問なのですが、以下のプログラムがエラーになるのはなぜでしょうか?
char* pc = "abc";
pc[0] = 'z';
cout << pc << endl;
以下のプログラムでは意図通りに動きます。
char ac[] = { 'a', 'b', 'c', '\0' };
cout << ac << endl;
ac[0] = 'z';
cout << ac << endl;
char* pc = "abc";
pc[0] = 'z';
cout << pc << endl;
以下のプログラムでは意図通りに動きます。
char ac[] = { 'a', 'b', 'c', '\0' };
cout << ac << endl;
ac[0] = 'z';
cout << ac << endl;
460はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI)
2018/03/07(水) 10:14:51.80ID:TWOfgg7C0 >>459
上は変数 pc はリテラル文字列の先頭を指すポインタ。
下の変数 ac は配列で、それを文字列 "abc" で初期化するって意味。
リテラルの破壊は未定義。
破壊しないことをあてにして破壊不可能なセクション (メモリ領域) に配置されたりすることもあるので、アクセスエラーが生じる。
あくまで未定義だから出来ちゃうこともあるし、コンパイラオプションで制御できたりもするけど、基本的にはあかんやつ。
上は変数 pc はリテラル文字列の先頭を指すポインタ。
下の変数 ac は配列で、それを文字列 "abc" で初期化するって意味。
リテラルの破壊は未定義。
破壊しないことをあてにして破壊不可能なセクション (メモリ領域) に配置されたりすることもあるので、アクセスエラーが生じる。
あくまで未定義だから出来ちゃうこともあるし、コンパイラオプションで制御できたりもするけど、基本的にはあかんやつ。
461デフォルトの名無しさん (ワッチョイ e75b-m1UI)
2018/03/07(水) 10:30:06.22ID:ylRgY7un0462デフォルトの名無しさん (アウアウウー Sa2b-m1UI)
2018/03/07(水) 10:35:31.71ID:ukyKg6LAa463デフォルトの名無しさん (アウアウウー Sa2b-m1UI)
2018/03/07(水) 11:10:02.03ID:ukyKg6LAa すみません、また、ベーシックな質問です。
char* pc1 = 1; → エラー
char* pc2 = NULL; → OK
char* pc3 = 0; → OK
なぜ、2番目と3番目はOKなのでしょうか?
char* pc1 = 1;
がエラーになるのは、 int 型の値で char* 型の変数を初期化できないからだとすれば、
char* pc3 = 0;
もエラーになると考えることもできると思います。
char* pc1 = 1; → エラー
char* pc2 = NULL; → OK
char* pc3 = 0; → OK
なぜ、2番目と3番目はOKなのでしょうか?
char* pc1 = 1;
がエラーになるのは、 int 型の値で char* 型の変数を初期化できないからだとすれば、
char* pc3 = 0;
もエラーになると考えることもできると思います。
464はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI)
2018/03/07(水) 11:10:26.68ID:TWOfgg7C0 >>462
Python なんか知らんがな。
Python の immutable は Python の immutable であって、それが C++ の何物かであったりはしないよ。
C++ のリテラルを破壊した結果は未定義というのは C++ のリテラルを破壊した結果は未定義という規則であるだけ。
似て感じられたとしても一対一に対応付くような単純なものではないので、
背景にあるメカニズムを理解せずに翻訳して理解しようとするような方法はお勧めできない。
Python なんか知らんがな。
Python の immutable は Python の immutable であって、それが C++ の何物かであったりはしないよ。
C++ のリテラルを破壊した結果は未定義というのは C++ のリテラルを破壊した結果は未定義という規則であるだけ。
似て感じられたとしても一対一に対応付くような単純なものではないので、
背景にあるメカニズムを理解せずに翻訳して理解しようとするような方法はお勧めできない。
465デフォルトの名無しさん (アウアウウー Sa2b-m1UI)
2018/03/07(水) 11:14:31.86ID:ukyKg6LAa466はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI)
2018/03/07(水) 11:22:08.82ID:TWOfgg7C0 >>465
書き忘れてたけど、 C++ の文字列リテラルの型は const char[] なので、
const 付きでないポインタに渡すと単純に型が合わなくてエラーになるはず。
C だと型に const が付いてないのに破壊するのは未定義ってことになっててあまりにもクソだったから改められた。
書き忘れてたけど、 C++ の文字列リテラルの型は const char[] なので、
const 付きでないポインタに渡すと単純に型が合わなくてエラーになるはず。
C だと型に const が付いてないのに破壊するのは未定義ってことになっててあまりにもクソだったから改められた。
467はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI)
2018/03/07(水) 11:32:07.41ID:TWOfgg7C0 >>463
0 はポインタに型変換可能で、型変換した結果が空ポインタと等しいことが保証されてる特別な存在。
(ビットパターンが等しいとは限らないことには注意が必要。)
互換であることが保証されているので、処理系によっては
#define NULL 0
として定義していることもある。
余談だが、これはオーバーロードされた関数でうっかりしやすいので気を付けた方がいい。
たとえば関数 foo が以下のような型でオーバーロードされている場合、
void foo(int);
void foo(int*);
これを
foo(NULL)
と呼び出すと void foo(int) が呼び出されたりする。
今ではヌルポインタを表すキーワード nullptr が用意されたので、
NULL はあまり使わない方が良い。
0 はポインタに型変換可能で、型変換した結果が空ポインタと等しいことが保証されてる特別な存在。
(ビットパターンが等しいとは限らないことには注意が必要。)
互換であることが保証されているので、処理系によっては
#define NULL 0
として定義していることもある。
余談だが、これはオーバーロードされた関数でうっかりしやすいので気を付けた方がいい。
たとえば関数 foo が以下のような型でオーバーロードされている場合、
void foo(int);
void foo(int*);
これを
foo(NULL)
と呼び出すと void foo(int) が呼び出されたりする。
今ではヌルポインタを表すキーワード nullptr が用意されたので、
NULL はあまり使わない方が良い。
468デフォルトの名無しさん (アウアウウー Sa2b-m1UI)
2018/03/07(水) 12:03:25.28ID:ukyKg6LAa469デフォルトの名無しさん (ワッチョイ e75b-m1UI)
2018/03/07(水) 12:29:38.25ID:ylRgY7un0 >>468
それはISO/IEC14882:1998の4.2で許されていたことに由来する
その後ISO/IEC14882:2011のC.1.1で廃止されたが
古いソースを通すために故意に違反状態のままにしている
それはISO/IEC14882:1998の4.2で許されていたことに由来する
その後ISO/IEC14882:2011のC.1.1で廃止されたが
古いソースを通すために故意に違反状態のままにしている
470デフォルトの名無しさん (アウアウカー Sabb-5mf3)
2018/03/07(水) 16:15:14.65ID:nnB4Kxzea c++の規約に違反にしないためには一度変数に代入する必要があるという事?
471はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI)
2018/03/07(水) 16:24:01.54ID:TWOfgg7C0 オプションで指定できるんじゃね?
俺は GCC を使ってるから知らんけど。
俺は GCC を使ってるから知らんけど。
472デフォルトの名無しさん (ワッチョイ e75b-m1UI)
2018/03/07(水) 16:29:51.37ID:ylRgY7un0 違う
char const* cc;
cc = "abc"; //完全に合法
char* pc;
pc = cc; //不適格
pc = "abc"; //CとC++98では非推奨、C++11以後では不適格
pc = &"abc"[0]; //左辺値変形でこう解釈されていて
非constへのポインタに、constへのポインタを代入することになり、
暗黙のconst外しにあたるので、C++11が正論
pc = const_cast<char*>("abc"); //C++11以後ではこう書く
char const* cc;
cc = "abc"; //完全に合法
char* pc;
pc = cc; //不適格
pc = "abc"; //CとC++98では非推奨、C++11以後では不適格
pc = &"abc"[0]; //左辺値変形でこう解釈されていて
非constへのポインタに、constへのポインタを代入することになり、
暗黙のconst外しにあたるので、C++11が正論
pc = const_cast<char*>("abc"); //C++11以後ではこう書く
473デフォルトの名無しさん
2018/03/07(水) 17:54:06.02474デフォルトの名無しさん (ワッチョイ df80-zeCZ)
2018/03/07(水) 18:18:25.20ID:TnxtYBSc0475はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI)
2018/03/07(水) 18:49:53.33ID:TWOfgg7C0476デフォルトの名無しさん (ワッチョイ e75b-m1UI)
2018/03/07(水) 20:52:49.95ID:ylRgY7un0477デフォルトの名無しさん (スップ Sdff-WWZl)
2018/03/07(水) 22:07:54.67ID:eXkgxxlqd 純粋仮想関数と関連付けてはいないだろう
それはともかくとして
char * p = 7-7; // no error
class T {
virtual void f() = 7-7; // error
};
となる気がするので言ってることは合ってるか
それはともかくとして
char * p = 7-7; // no error
class T {
virtual void f() = 7-7; // error
};
となる気がするので言ってることは合ってるか
478デフォルトの名無しさん (ワッチョイ 5f7e-m1UI)
2018/03/07(水) 22:10:57.06ID:NKcGF/Sn0 C言語でNULLが0をdefineしたものだったというだけだろ
479デフォルトの名無しさん (スップ Sdff-WWZl)
2018/03/07(水) 22:12:59.22ID:eXkgxxlqd C言語では ((void*)0) だった気がする
480デフォルトの名無しさん (ワッチョイ e75b-m1UI)
2018/03/07(水) 22:34:03.79ID:ylRgY7un0481デフォルトの名無しさん (スップ Sdff-WWZl)
2018/03/07(水) 22:41:42.97ID:eXkgxxlqd いや疑問も呈していないし否定しているわけでもないのに当然と言われてもな…
482デフォルトの名無しさん (ワッチョイ e75b-m1UI)
2018/03/07(水) 22:52:11.20ID:ylRgY7un0 じゃあ何のために、7-7とか言い出したんだ?
483はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI)
2018/03/07(水) 23:02:40.75ID:TWOfgg7C0484はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI)
2018/03/07(水) 23:12:03.15ID:TWOfgg7C0 >>483
と、思って調べてたんだけど、 C++ だと確実にあかんようだけど C だとアリなのかもしれない。
と、思って調べてたんだけど、 C++ だと確実にあかんようだけど C だとアリなのかもしれない。
485デフォルトの名無しさん (ワッチョイ 078a-Jyeh)
2018/03/07(水) 23:58:27.20ID:/Jrz1mw60 offsetof()がどう実装されているかやね
486デフォルトの名無しさん (ワッチョイ 6a33-hn8E)
2018/03/08(木) 02:18:11.16ID:BQ11IIJi0487はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 666f-uQtz)
2018/03/08(木) 03:31:21.90ID:+04GXVK30 おっ、こんな基本的なことで変更が入ってたのか。
でも当然といえば当然の処置よな。
でも当然といえば当然の処置よな。
488デフォルトの名無しさん (ワッチョイ e6e7-frl3)
2018/03/08(木) 06:41:46.04ID:DSeYC6Qd0 Cの無意味な汚いゴミが掃除されるのは良いことだ
489デフォルトの名無しさん (ワッチョイ 7f23-6rgV)
2018/03/08(木) 07:33:41.79ID:dmEui5aT0490デフォルトの名無しさん (ワッチョイ 2a8f-HFNi)
2018/03/08(木) 18:35:02.35ID:uuOHCrug0 C++の勉強+機械学習も勉強しようとVisual Studio 2017でtiny-dnnを用いたいのですが、tiny-dnn内でコンパイルエラーが発生します。
具体的にはxcontainer.hpp内でC3203というエラーが頻発したり、feedfoward_layer.hppではC2760というエラーが発生したりしています。
環境はWindows 7でVisual Studio 2017 communityです。
プロジェクトはwindowsデスクトップアプリケーションを用いています。
tiny-dnnのインクルードはプロパティのインクルードディレクトリに追加しています。
どなたか心当たりのある方がいらっしゃれば教えていただけると嬉しいです。
具体的にはxcontainer.hpp内でC3203というエラーが頻発したり、feedfoward_layer.hppではC2760というエラーが発生したりしています。
環境はWindows 7でVisual Studio 2017 communityです。
プロジェクトはwindowsデスクトップアプリケーションを用いています。
tiny-dnnのインクルードはプロパティのインクルードディレクトリに追加しています。
どなたか心当たりのある方がいらっしゃれば教えていただけると嬉しいです。
491デフォルトの名無しさん (スプッッ Sd2a-dsCQ)
2018/03/08(木) 19:27:19.96ID:i2S5Knpdd linux windows両対応のコードを考えている最中の質問です
unsigned int型の変数xの32bitに、char型の配列y[4]の8bit×4を当て込みたいです
y[0]から順にxの先頭ビットに入れたいのだけど
そういう時はどのようなコードになるのでしょうか
符号の問題で単純に24bitシフト+16bitシフト...みたいなことをすると期待の値にならないときが存在してます
unsigned int型の変数xの32bitに、char型の配列y[4]の8bit×4を当て込みたいです
y[0]から順にxの先頭ビットに入れたいのだけど
そういう時はどのようなコードになるのでしょうか
符号の問題で単純に24bitシフト+16bitシフト...みたいなことをすると期待の値にならないときが存在してます
492デフォルトの名無しさん (アウアウカー Sa7b-ccCq)
2018/03/08(木) 19:50:56.79ID:2k5PL6f/a unionでどう?
493デフォルトの名無しさん (スッップ Sd8a-6rgV)
2018/03/08(木) 20:26:39.82ID:FhiFltVyd >>491
シフトする前にunsigned charにキャストする
シフトする前にunsigned charにキャストする
494デフォルトの名無しさん (スッップ Sd8a-6rgV)
2018/03/08(木) 20:29:17.36ID:FhiFltVyd496デフォルトの名無しさん (ワッチョイ caaf-+ocK)
2018/03/09(金) 11:50:12.37ID:XHk1xHdH0 ヘッダーファイルの関数定義から関数ポインタをtypedefする事は可能ですか?
C++98辺りのコンパイラです。
C++98辺りのコンパイラです。
497はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 666f-uQtz)
2018/03/09(金) 12:25:38.00ID:nl8HCt1x0498デフォルトの名無しさん (スップ Sd2a-O8QP)
2018/03/09(金) 12:57:58.47ID:zqzgOSq4d テンプレート使えないかな?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 東京都「都民の税金1.5兆円が国に奪われている」「全国に分配されている」に地方民ブチギレ [Hitzeschleier★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 [蚤の市★]
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★4 [Hitzeschleier★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ [蚤の市★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- 中国政府、国民に再び日本に行かないよう警告。「高市政権が地震頻発で大地震が発生する可能性あると言ってます😤」 [271912485]
- トランプ、G7に代わるcore 5を発表 [805596214]
- 【まずは自助】高市早苗「自らの命は自らが守るという原則に従っていただく」 青森の被災地、能登と同じく見捨てられる模様 [314039747]
- 【悲報】新米、全く売れなくて倉庫が満杯になってしまうwwwwwwwwwwwwwwwwwwww [802034645]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★5
- 【悲報】日本共産党、ツイッター速報にブチギレ法的措置WWWWWWWWWWWWWWWWWWWWWWWWWWWW [935793931]
