C++相談室 part158

■ このスレッドは過去ログ倉庫に格納されています
2021/11/15(月) 18:49:18.44ID:I69rZ/Of
前スレ
C++相談室 part157
https://mevius.5ch.net/test/read.cgi/tech/1628474251/
2021/11/19(金) 17:22:13.91ID:r4tdjD9P
アホすぎる
C++の話しようぜ
85デフォルトの名無しさん
垢版 |
2021/11/19(金) 18:47:23.14ID:P2N6jWZN
WindowsのvisualC++2019でDLLのロードが出来ません
dll defからlibをつくり#pragma comment( lib, "sample" )とやればできた記憶なんですが
64bitのバージョンも全部合わせてあるんですが
10年ぶりにやったら動きません
ボーランドC++だと修飾名が変わってdefを書き換えたりはあったと思うのですが

> error LNK2019: 未解決の外部シンボル sqlite3_open
8685
垢版 |
2021/11/19(金) 18:53:32.17ID:P2N6jWZN
自己解決しました
dumpbin.exe /exports コマンドでdefファイルを作成した場合、
EXPORTS の記述がなかったからでした
2021/11/20(土) 00:18:32.03ID:KMJ1ohr2
>>81
エスケープを円で覚えてるからそんな間抜けな間違いするんだよ
ブログラマならエディタの設定変えとけ
2021/11/20(土) 04:22:38.39ID:VRiN34hT
>>81
馬鹿過ぎて
89デフォルトの名無しさん
垢版 |
2021/11/20(土) 11:48:10.21ID:DTIeq0Vp
>>87
ブログラマってなにかの隠語?
2021/11/20(土) 12:05:58.69ID:T1SqYaku
ナニナニ
    彡⌒ ミ ナニナニ
   (´・ω・`) 彡⌒ミ
,彡⌒ 彡⌒ ミ (・ω・`) また文字コードの話?
(´・ω(´・ω・`) ⌒ ミノ⌒ミ
  u_| ̄ ̄||´・ω・`)ω・`) マター?
 /旦|――||// /|と ノ
 | ̄ ̄ ̄ ̄ ̄| ̄| . |-u
 |_____|三|/
2021/11/20(土) 19:11:01.64ID:F5vrtFYR
>>90
プログラマ=ハゲと思われるからそのAAやめろよ(´・ω・`)
2021/11/21(日) 03:33:39.04ID:yh1CvOcy
実際C++プログラマはハゲが多いんだから別にいいだろう
教祖からしてハゲなんだし
2021/11/21(日) 08:40:03.48ID:uokK0Aao
そうそう、教祖がゲーハー
これはデカい
2021/11/21(日) 17:11:36.41ID:BwaLJwgU
Greek PhiはU+03A6(大文字)・U+03C6(小文字)・U+03D5(数学用シンボル)
Empty setはU+2205
全く別のコードポイントが割り当てられてるし、>>19の資料でも全く別の文字として議論されてるけど
何を見て何がどう区別されてないと思った?
2021/11/21(日) 20:56:14.20ID:MSJBJTi1
プログラミング言語の世代論というのがあって、
第一世代は CPU のアーキテクチャべったりの機械語、
第二世代は機械語が解る人間向きの低級言語、
第三世代は自然言語寄りの高級言語、
第四世代は目的型言語、
…… で、いわゆる「第五世代」は、コンピュータの都合じゃなくて
人間の都合に合わせようよ、というコンセプトになった。
「じゃあ、どのあたりから始めるか」という話は
ありそうに思う。
2021/11/21(日) 22:09:51.70ID:jS7RYefb
>>79
素人丸出しとか言ってるが
実際macだと設定によってはバックスラッシュと同じ扱いにならない\が
普通にキー叩いたら出るんだぞ
2021/11/21(日) 22:16:19.52ID:32ll5fa9
エスケープが円だと思ってるから間違えるんだろ
2021/11/21(日) 22:42:33.87ID:zasxIKRm
普段からU+005Cのグリフがバックスラッシュになってるフォントしか使わないから円記号に違和感しかない

そりゃ個人の自由だけどプログラミングしてるなら少しフォントにこだわってもいいと思う
2021/11/22(月) 11:36:57.09ID:/m9OFYAK
日時を数値に変換する良い感じの関数教えてくださいよ
2021/11/22(月) 11:53:19.81ID:NpEcC+CD
std::chrono
2021/11/22(月) 12:07:40.30ID:axkd8Lua
おどろき最小の法則と言えば
https://onihusube.hatenaぶろぐ.com/entry/2020/04/03/211442
2021/11/22(月) 12:12:11.62ID:buYIHjVZ
人を下に見られる程精通してる人って正直羨ましいわ
知れば知るほどまだまだ知らない事が沢山あるなぁと勉強不足を実感してしまう

知らないから人をバカに出来るんだよなー

むしろ人を下にみないと精神状態が不安定なんでしょ
2021/11/22(月) 12:23:22.14ID:NpEcC+CD
ダニングクルーガーね
2021/11/22(月) 13:29:19.96ID:SX8MGonp
Windows App SDK入れてみたがエラーが多くまだ使えない
2021/11/22(月) 19:04:02.58ID:aHjY0LXr
ヘッダファイルで変数の宣言するとき、引数付きのコンストラクタ使おうとするとコンパイルエラー出るんですけどこの書き方って良くないんですか?
2021/11/22(月) 19:08:25.29ID:f9+TjGGq
>>105
ヘッダだからエラー、というわけではないです
ヘッダじゃない普通の cpp に書いてもエラーなのでは?
具体的にソースを示してください
2021/11/22(月) 20:43:52.70ID:aHjY0LXr
>>106
// NG ヘッダにそのまま書こうとすると型指定子が必要ですとエラーが出る
private:
MenberLibClasse obj ("piyopiyo");

// OK ヘッダには引数なしで宣言した後、cppでobjをメンバに持つクラスのコンストラクタの初期化子リストを使うと何故か通る
private:
MenberLibClasse obj;
Class() :obj ("piyopiyo") { }

挙動把握しきれないんですけどライブラリ側の問題でしょうか??
2021/11/22(月) 20:50:48.90ID:f9+TjGGq
>>107
NG のときのエラーの内容は?
エラーメッセージを貼ってください、正直、よくわかりません
2021/11/22(月) 20:56:23.56ID:0LbM6y2O
>>107
宣言の位置でメンバを初期化できるのはC++11からだけど、それが原因かな?
2021/11/22(月) 20:59:28.54ID:UBpGrDL8
書くとしたらこうやろ
private:
MenberLibClasse obj = "piyopiyo";
2021/11/22(月) 21:02:09.68ID:jXuEZ/Sz
丸括弧はダメだよ
イコールか波括弧でなきゃ
2021/11/22(月) 21:04:04.13ID:jXuEZ/Sz
型指定子が必要って言われるのは
関数宣言と見られていて
仮引数の場所にリテラルがあるってことだ
113デフォルトの名無しさん
垢版 |
2021/11/22(月) 21:13:00.22ID:aHjY0LXr
>>111
イコールはダメで波括弧に変えたらコンパイルできました
2021/11/22(月) 21:30:02.05ID:ahYOm2Qx
private:
MenberLibClasse obj{"piyopiyo"};
2021/11/22(月) 23:03:46.80ID:gucWMAFN
>>99
using namespace std::chrono;

// 現在時刻を取得
system_clock::time_point tp = system_clock::now();

// 現在時刻のミリ秒部分を取得
auto msec = duration_cast<milliseconds>(tp.time_since_epoch()).count() % 1000;

みたいなことをやると良い最後のまmillisecondでもsecondでもnanosecondでも逝ける

こないだ死ぬほどやり倒すた、

しかしずんねんながら現状MSVCのstd::chrono::zoned_timeが未実装のため、

システム時刻関連処理についてstd::chronoの利用を断念すた、orz
2021/11/22(月) 23:16:45.51ID:gucWMAFN
なおtime_point同士で引き算もできる
結果を具体的時間単位の時間表現にするのは同じくduration_cast<T>()
2021/11/23(火) 10:20:15.57ID:wZOweAJh
ostringstream の precision の上限がなぜか 255 に設定されているようで
mpreal big("1000桁規模の浮動小数点数");
ostringstream ss;
ss.precision(1000);
ss << big;
とすると ss に 255 文字程度しか入らないのです
cout.precision(1000);
cout << big;
だと 1000桁出ます
ostringstream の precision の上限をもっと大きくする方法はありますか?
2021/11/23(火) 10:22:20.09ID:wZOweAJh
ああ
勘違いかも
もうちょっと調べて質問します
2021/11/23(火) 10:28:59.05ID:wZOweAJh
とりあえず判ったのは
ss.rdbuf() の default の上限値が 255 らしい
2021/11/23(火) 10:53:38.11ID:v39GCTAR
だっせ
そんな上限、規格票に書いてあるのか?
2021/11/23(火) 11:40:46.26ID:Vfqk4Xs7
>>115
>MSVCのstd::chrono::zoned_timeが未実装

TZ=JST-9
とか描いてあってもだめかな
2021/11/23(火) 11:52:24.16ID:wZOweAJh
>>120
ss.rdbuf()->in_avail()
2021/11/23(火) 13:42:01.58ID:X+sq98An
再現しそうな最小限のコードだけ描いて
mingw + gcc でコンパイル&実行したら期待通りの動作をしたが
VC だとやっぱり上限があるっぽい動きになってる
rdbuf() 使いつつ seek() すれば大丈夫かも知れないが
自分の使い方が間違ってるだけだと思いたい
2021/11/23(火) 13:44:07.61ID:X+sq98An
とりあえず mpreal は関係なかった
VC 側の問題らしいのでもう少し掘ってみる
2021/11/23(火) 14:39:06.53ID:X+sq98An
VC 側 rdbuf()->pubseekpos() 併用で解決
2021/11/23(火) 15:22:40.52ID:V3fVQTwt
クラスのメンバ変数が全部intとかdoubleとかで足し算掛け算ができるものの場合に、
クラスの足し算掛け算を各メンバ変数の足し算掛け算として定義したいのですが
operator +とかoperator *のオーバーロードでメンバ変数について一個ずつ書いていく以外の方法ありますか?

今やろうとしていることでメンバ変数が多いので、いちいち列挙せずに済むなら便利だなと思ったのですが
2021/11/23(火) 15:49:25.55ID:57zkg5+u
>>126
valarrayじやね?
2021/11/23(火) 16:47:46.55ID:za9QU+hA
>>117
VC の in_avail() が間違った値を返してるんだなこれ
2021/11/23(火) 17:12:53.52ID:V3fVQTwt
>>127
ありがとうございます、使ってみます
2021/11/23(火) 17:34:18.50ID:VSfhJ4CF
>>126
現在の C++ はリフレクション系の機能が弱くてクラスからデータメンバを列挙するというようなことは出来ない。
「全てのメンバに対してやってくれ」というようなことはできない。
ただ、対象となるメンバを取り出すものさえ用意すればそれを様々な演算に適用することは可能だと思う。
つまり、メンバの列挙を一度で済ませる (なんども列挙しなくてよい) ことは出来るかもしれないってことね。

とはいえそれはそれで割とクソめんどうくせぇメタプログラミングの下準備が要るので
いっそ列挙しまくったほうが簡単かもしれん。
2021/11/23(火) 17:57:00.33ID:UgBkVfMX
Q_OBJECT とかだとメンバの列挙出来たっけ
2021/11/23(火) 23:10:58.29ID:G9Rlesey
>>121
駄目なんじゃないかと思う
std::chronoはtime_pointを抽象化してタイムゾーンの異なる時刻間の差分を自動で取り扱いたい(そういう思想な)はずで、
ということはローカルタイムを扱う手段としてzoned_timeは無くてはならないピースとみなさざるおえない

どうしてもというならstd::chrono::system_timeを経由して古き良きtime_tとtime_pointの相互変換ができるから、
time_tまで降りてローカルタイムにしてtime_pointに戻す手はあるが、それをすると
同じtime_pointクラスで表される2種類のシリアル時間がプログラム内に生じてしまうから、
std::chronoの上記思想(時刻の差分や比較を自動で安全に取り扱いたい)が破壊される

ライブラリ仕様の理想が高邁すぎるか実装側の怠慢によって大事な用途において糞ライブラリになってしまっている例
2021/11/23(火) 23:41:07.98ID:mX+uwseB
何が出来ないと言っているのかまるで分からん
出来る部分と出来ない部分の切り分けがいるんでないの?
2021/11/24(水) 00:03:21.95ID:EdXujyLt
time_point(事実上UTC)とローカルタイムの相互変換がstd::chronoが思想的に目指しているほど安全にはできない
zoned_timeが実装されない限り

time_point(事実上UTC)同士の比較や差分はzoned_timeが実装されてないバージョンでも安全にできる
2021/11/24(水) 00:18:07.67ID:HKyZluCV
そんなアバウトな情報いらん
2021/11/24(水) 00:31:14.95ID:EdXujyLt
えっと、>>135はUTCとローカルタイムの変換ってわかります?
2021/11/24(水) 00:39:36.48ID:EdXujyLt
std::chronoで現在時刻を取得する一番自然な方法は、
 system_clock::time_point now = system_clock::now();

他にもtime_tからの変換という方法があるが、いまさらtime_t使え言うぐらいならstd::chrono使わずにtime_tだけ使うは;;;

で、nowはどう見てもUTCであるから、日本時間を知りたければ、
上記time_point nowが日本時間の何年何月何日の何時何分何秒なのかを出力できねばならない
std::chronoの中にはzoned_timeを使わずにそれをやる手段が見当たらない
2021/11/24(水) 00:44:19.87ID:jtZYcQVF
C++20より前のchronoはタイムゾーンのこと知らんからな…
2021/11/24(水) 01:06:29.20ID:HKyZluCV
>>99で聞かれてるのは「日時を数値に変換」だろ?
前提も条件も全部曖昧で、自然とか思想とか思い込みばかり
何を使うと何が出来て何が出来ないを全く説明してない
2021/11/24(水) 01:21:45.20ID:Jllasahs
chronoはローカルタイムを扱えない、と言ってると思うよ
2021/11/24(水) 02:40:02.07ID:xFDMAHHD
http://pbs.twimg.com/media/EUH_eMWUwAAgsV4.jpg
https://pbs.twimg.com/media/D4p7dNfUwAAa34y.jpg
2021/11/24(水) 03:00:57.55ID:P1gN11rG
ローカル時刻かUTCか以前の問題として、そもそもどんなフォーマットで数値に変換するのか
それが不明だったから誰も回答しなかったのだろうに

あとドキュメント信じる限りじゃzoned_timeはVS2019 16.10から使えるってよ
2021/11/24(水) 03:04:53.60ID:Q5JPayEq
C++は糞
std::は糞ばかり
boost最強
まで読んだ
144デフォルトの名無しさん
垢版 |
2021/11/24(水) 03:08:01.30ID:Q5JPayEq
>>142
>>100 が悪い
2021/11/24(水) 04:22:29.20ID:xFDMAHHD
じゃ、もうtime_t使っとけ
2021/11/24(水) 05:14:05.40ID:ZtAViqSQ
「良い感じの関数」なんて今流行りwのAIとか使わんと無理でしょ
2021/11/24(水) 07:01:18.14ID:xQvD3wWY
確かにchronoは今一だね
filesystemはthread, iomanipとの連携が悪すぎ
使いにくいったらありゃしない
2021/11/24(水) 07:01:39.82ID:xQvD3wWY
- filesystemは
+ tilesystemや
2021/11/24(水) 08:47:11.69ID:xQvD3wWY
auto p = (void*)[]{};
これが通らないんだけど
stateless-lambdaは関数と見なせない?
2021/11/24(水) 09:11:02.53ID:083KFMkM
auto p = (void*)(void (*)())[]{};
2021/11/24(水) 09:17:04.13ID:xFDMAHHD
auto p = []()->void*{};
もう少し学習しろ
2021/11/24(水) 10:46:50.00ID:kXzWnsgO
何がしたいんか知らんけど
auto p = [](){};
auto p = []()->void*{};
auto p = []()->void{};
本人の意図が判らんことには絶対に正解に辿り着けない質問大杉
2021/11/24(水) 11:11:35.49ID:xQvD3wWY
void func1(void*);
void func2(){}
func1(func2);
のようなことをしようとしてて怒られるから
func1((void*)func2);
にしてた

で、func2で名前空間を汚染したくないから
stateless-lambda使おうと思った
2021/11/24(水) 11:25:51.06ID:nY9AsqgQ
関数 (関数ポインタ) を void* で受ける雑なことをしといて名前空間を汚すのは気にするのか。
まあフレームワークとかの側でそうなってたら仕方ない場合もあるけど……。
2021/11/24(水) 11:28:11.15ID:P1gN11rG
variant的なことを昔ながらの方法でやっているのかもしれない
2021/11/24(水) 11:41:52.30ID:kXzWnsgO
auto p = []()->void*{return NULL;};
↑これはOKだが
auto p = []()->void*{};
↑こっちはコンパイルエラーにして欲しいよね
2021/11/24(水) 11:48:13.06ID:jtZYcQVF
単にステートレスラムダを関数ポインタに変換したいならこういう有名なハックがある
auto p = +[]{};
2021/11/24(水) 12:47:46.56ID:xQvD3wWY
>>157
おお、これはいい
dx
2021/11/24(水) 12:55:27.21ID:xQvD3wWY
ポインタに単項プラスなんぞ考えたこともなかった
void test(char* p)
{
cout << +p << endl;
cout << *+p << endl;
cout << *(0+p) << endl;
cout << 0[p] << endl;
}
2021/11/24(水) 15:19:51.62ID:083KFMkM
生配列をポインタに変換するときも単項+使うね
2021/11/24(水) 15:33:19.13ID:kXzWnsgO
>>160
何が嬉しいの
2021/11/25(木) 09:42:14.59ID:r5Heuy4P
C++11 や C++17 や C++20 とかどのオプションでコンパイルされているかを
コンパイル中に判断したいのですが
ソースコード中にどう書けばよいのですか
2021/11/25(木) 10:11:07.71ID:r5Heuy4P
解決
https://docs.microsoft.com/en-us/cpp/build/reference/std-specify-language-standard-version?view=msvc-160
_MSVC_LANG
2021/11/25(木) 10:12:19.59ID:lTzmbhqT
全然解決してなくて草
2021/11/25(木) 11:00:47.97ID:nZfwh6w7
>>161
#include <iostream>
#include <cstdio>
int main() {
int a[] = {1, 2, 3, 4};
std::printf("%p %p\n", &a, &a + 1);
std::printf("%p %p\n", +a, +a + 1);
int (*p)[4] = &a;
std::printf("%p %p\n", p, p + 1);
int *q = &a[0];
std::printf("%p %p\n", q, q + 1);
return 0;
}
0x7ffd548f5d00 0x7ffd548f5d10
0x7ffd548f5d00 0x7ffd548f5d04
0x7ffd548f5d00 0x7ffd548f5d10
0x7ffd548f5d00 0x7ffd548f5d04
つまり&a[0]と書くのを+aと書くだけですませられる
どっちが分かりやすいかはさておき
2021/11/25(木) 11:28:16.28ID:pIkhaGD2
__cplusplus マクロ見るんじゃね?普通は
あとは言語機能ごとのマクロ見たり
2021/11/25(木) 11:38:56.35ID:lTzmbhqT
まるで間違ってて草
2021/11/25(木) 13:18:45.98ID:U2fItJ5c
>>165
<iostream>いらないね

それとlvalue transformationがかかる場面で
わざわざ単項プラスを使う必要性が
そのサンプルでは示せてないようだが
2021/11/25(木) 14:43:49.72ID:Ts2h3uwp
みんなテキトーだなー(棒)
2021/11/26(金) 02:28:38.10ID:qCsl9kRb
>>166
処理系がちゃんとそのへんのルールを守ってくれればいいが現実は非情である。
2021/11/26(金) 21:22:58.84ID:Hq7eoo6P
https://www.youtube.com/watch?v=ia8GncoXA1s
2021/11/27(土) 03:24:08.24ID:ymghmbi1
The following macro names shall be defined by the implementation:
__cplusplus
The name __cplusplus is defined to the value 199711L when compiling a C++ translation unit.

G++ now sets the predefined macro __cplusplus to the correct value, 199711L for C++98/03, and 201103L for C++11.

http://gcc.gnu.org/gcc-4.7/changes.html
But g++ < 4.7.0 is __cplusplus defined alway 1.

https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
2021/11/27(土) 04:01:44.14ID:7zx+CKid
いまさらかよ
2021/11/27(土) 12:26:56.81ID:tS+5RcHX
マジかよ知らなかった
GCCくんさぁ…
2021/11/27(土) 13:29:25.44ID:at/FeDW1
>>174
初心者?
2021/11/27(土) 14:01:53.67ID:7zx+CKid
リナスもg++の設計にはイラチMAXの筈だわ
2021/11/27(土) 15:41:12.47ID:dxTMcmeT
Rust厨に弱みを魅せるな
2021/11/27(土) 16:22:10.07ID:GY7utvzm
よわみにはつけこまれる
2021/11/28(日) 21:05:38.19ID:6joWVJIB
C++でblas, lapackを使うのにいいインターフェースってどれでしょうか?
調べてたらCppLapack, Lapack++、armadillo とか出てきましたが、定番さとか使いやすさとか教えていただけると嬉しいです

とりあえずは複雑なことはしない予定で、行列の掛け算とか対角化ぐらいが簡潔に書けると嬉しいです
180デフォルトの名無しさん
垢版 |
2021/11/29(月) 00:38:26.49ID:UEkaTEcQ
久しぶりにC++再開したが
昔からだが
PHPはC++のスクリプト版といえるかのように文法・関数が似てるから
プロトタイプをPHPで作成したほうが時短になるかと?
仮想コードによるアルゴリズムの記述やフローチャートなどに近い
181デフォルトの名無しさん
垢版 |
2021/11/29(月) 00:43:30.91ID:UEkaTEcQ
行列の掛け算とか対角化ならPythonかマキシマでいいとおもうが?
大規模だともしかしたらC++のほうが早いかもしれないが
PythonだとGoogle ColaboratoryとかでGPUをネットワーク使用できたりするが



Colaboratory とは
Colaboratory(略称: Colab)は、ブラウザから Python を記述、実行できるサービスです。次の特長を備えています。
環境構築が不要
GPU への無料アクセス
簡単に共有
https://colab.research.google.com/notebooks/welcome.ipynb
2021/11/29(月) 01:05:44.61ID:roEk3hNb
宣伝はお断りしています
2021/11/29(月) 06:13:36.91ID:i8Ax0msm
>>179
BLASというとvalarrayだね
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況