TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
TypeScript(MS) VS Swift(Apple)
Java/C++ VS C# どっちが好きか教えて
Gtkプログラミング on Windows!!!
ふらっと C#,C♯,C#(初心者用) Part147
プログラミングのお題スレ Part11
盗用したコードどれくらい書換えれば合法になるの?
Microsoft Silverlight その9
いまだにVC6から離れられない奴の数→
awkについて語るスレ $2
シェルスクリプト総合 その31

C++相談室 part151


1 :2020/05/14 〜 最終レス :2020/06/14
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part150
https://mevius.2ch.sc/test/read.cgi/tech/1584975873/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.2ch.sc/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)

テンプレここまで

2 :
>>1
O2

3 :
https://mevius.2ch.sc/test/read.cgi/tech/1584975873/1000
> 1000 名前:デフォルトの名無しさん[sage] 投稿日:2020/05/14(木) 15:51:59.69 ID:X1Z5LMNW [4/4]
> ん?
> >未だにC++03にしがみついているわけがない
> >>993で17使ってると言ってたようだが
>
> てかもうちょい生産的な話出来んのか
> 仕事でも趣味でも都合の良いコンパイラ使えばいいだけの話
> 構造化束縛をマクロとテンプレートで実現するとかなら面白い話題なんだけどな(面白いだけで実用性があるとは言ってない
なんだ、17で俺スゲーやってんのおまえじゃん
俺は仕事で17は当たり前という立場
おまえは仕事には危なくて使えないという立場
俺に教えを請うて突っぱねられたのがおまえ
あとはわかるな?

4 :
>>3
>なんだ、17で俺スゲーやってんのおまえじゃん
>おまえは仕事には危なくて使えないという立場

俺の話じゃないんだが・・
いいから消えろよ荒らしは

5 :
ホスト環境は17、組み込みは03で良いのでは?

6 :
>>5
その「組み込み」ってのは、まさかH8とかか?
ARM用のコンパイラがどうなっているか知ってるか?

7 :
>>4
逃げたければ消えるのはおまえだ
ほら行けよ、追わねえでやるから

8 :
extern "C" 以下が、宣言になるなのか、定義になるのかについて、以下のページには、
extern "C" { int i; } と書くと、i は、「定義」される。
宣言で済ましたい場合には、
extern "C" { extern int i; }としなくてはならない。しかし、中括弧で囲まずに、
extern "C" int i;
と書いた場合には、i は「宣言」だけされる、とあります。
さらに、これは変数の場合で、関数の場合には、戻り値 関数名(仮引数列) の後に関数定義部の{・・・}
があるかどうかで宣言か定義かが変わるだけのようです。といいますか、関数の場合は、関数定義部
がなければ、「定義」しようがないのでそれは当然かもしれませんが(結構複雑です。)。

これらの動作について、cppreference などで述べられているページがあれば、
教えていただければ幸いです。

https://stackoverflow.com/questions/1041866/what-is-the-effect-of-extern-c-in-c

Note that extern "C" { int i; } is a definition.
This may not be what you intended, next to the non-definition of void g(char);.
To make it a non-definition, you would need extern "C" { extern int i; }.
On the other hand, the one-declaration syntax without braces does make the declaration a non-definition: extern "C" int i; is the same as extern "C" { extern int i; }

9 :
>>8
【関連事項】
[winnt.h の中]
#ifdef __cplusplus
#define EXTERN_C extern "C"
#else
#define EXTERN_C extern
#endif
[urlmon.h の中]
EXTERN_C const IID CLSID_CdlProtocol; // (100)
[考察]
(100)は、EXTERN_C のマクロ展開後
*pure C では、
extern const IID CLSID_CdlProtocol; // (101)
*C++ では、
extern "C" const IID CLSID_CdlProtocol; // (102)
となります。
(101)は明らかに(「定義」ではなく)「宣言」なので、モード間のバランスから考えて、
(102)も宣言でなくてはなりません。一方、
#ifdef __cplusplus
extern "C" {
#endif
int aaa;
#ifdef __cplusplus
}
#endif
と書いた場合、aaa は、どちらのモードでも「(変数)定義」であり、単なる「宣言」ではありません。
これは、(102)が「宣言」であることと、ある種の矛盾を生じているようですが、これが現状の
正しい解釈のようです。しかし、この事が cppreference のどこに書いてあるのかが分かりません。

10 :
1回しか使われていない場合
2回以上使われている場合
「宣言」とは別に定義がリンクされている場合

11 :
>>10
そういうことは理解しているつもりです。
extern ではなく、extern "C" の動作が、直後にブロックがあるかないかや、
変数か関数かによって、不思議な変化を見せることに興味があります。

12 :
int aaa; //definition in C++, tentative in C
int aaa; //invalid in C++, valid in C

13 :
クラスで定義された型を言語構文でバラして対応付けると言う非対称な気持ち悪さと
const, 非constを混在して受けられない不便さとがあるな
構造化バインディング
まーtuple限定ではなく構造体を対応付けられるから非対称ってわけでもないか

14 :
>>8
extern "C" {}
はブレース内をCリンケージで処理するつって話
extern "C" int a;
はCリンケージのextern文

15 :
>>14
stackoverflow以外に、公式サイトでそれが書かれている場所を教えていただければ幸いです。

16 :
cppreferenceは仕様書じゃないから書いてなくても不思議じゃないと思うけど。
仕様書見たら?ドラフト版はネットに転がってる

17 :
>>16
その公式アドレスを教えていただければ幸いです。

18 :
>>15
cppreference.comに書かれてるぞ

19 :
externの説明のnotesのところにな

20 :
>>17
ggrks
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf

あとcppreferenceはある意味ファンサイトみたいなものなので、何らかの標準化組織の公式サイトというわけじゃないよ

21 :
つーか、cppreferenceに書いてあるのに見落としてよそのサイト教えろとか馬鹿丸出しで笑える

22 :
バカにバカというのはバカ差別で違法だからね。

23 :
情報量ゼロのゴミレスでドヤ顔する自覚なきクズ大杉
20はggrksと言いながらちゃんとリンク貼ってる

24 :
>>22
https://www.youtube.com/watch?v=M-5c6l4QfC8

25 :
>>24
「私たちは抗議活動のための支援団体、人道支援団体ではない」
反日団体だから慰安婦なんか知ったことじゃないって事だろ?
筋通ってると思うが。

26 :
そういえば、チョンにチョンというのはチョン差別で違法だけど、日本人に日本人というのは別に問題ないね。
フランス人にフランス人というのも問題ないし、中国人に中国人というのも問題ない。
何が違うんだろ。

27 :
チョンというのがダメなのかと思ったけど。
朝鮮人に朝鮮人というのも朝鮮人差別だから違法だよね。
ますますわからん。

28 :
以下の混乱を、どう解決すべきか分かる人いますか?
・無名の共用体: 問題は特に有りません。
・無名の構造体: 入れ子の構造体(nested class)の「型定義」と区別が付かない気がします。
以下はその説明です :
class CPerson {   // (1)
  struct _TAaa {   // (2)
    ・・・
  };   // (3)
};
と書いた場合、(3) の部分にメンバ名が書かれていません。
しかし、これでは以下のどちらかなのか区別できない気がするのです。
a. CPerson の中に「無名ではあるが実態のあるメンバ」として「メンバ変数」を定義するつもり。
b. 単に、CPerson の class scope の中に _TAaa というタグ名を持つ構造体を「型定義」するつもり。

MSは、a の方針で、この形式 (2)〜(3) を、「anonymous structure」と定義しているらしいです。
しかし、C++ には、b の解釈の「nested class」という言葉も存在しています。

29 :
>>28
自分でコンパイルしてどうなるか試したんだよな?

30 :
2に名前つけている時点で無名じゃない

31 :
>>30
なるほど。

32 :
std::bitset を std::unordered_map か std::map のキーとして使用したいのですが、
どうすればよろしいのでしょうか?

33 :
>>32 やってみて、何か問題あったの?

34 :
std::unordered_map<std::bitset<42>, int> um;
um[std::bitset<42>("0011")] = 9999;
std::cout << um[std::bitset<42>("0011")] ;
普通に動いたぞ
何に困ってるんだ?

35 :
>>33
>>34
下のコードで書いてもエラーが出てしまってどうすればよいかがわからないんです。
#include <map>
#include <unordered_map>
#include <bitset>
int main()
{
std::map<std::bitset<100>, int> a;
std::bitset<100> n;
n.set( 1 );
a.insert( std::make_pair( n, 100 ) ); // ここでエラーが出てしまいます。
return 0;
}

36 :
>>35 エラーメッセージも貼って、エラーメッセージのわからないところも書いてくれるといいな。

37 :
>>36
error C2676: 二項演算子 '<': 'const _Ty' は、この演算子または定義済の演算子に適切な型への変換の定義を行いません。(新しい動作; ヘルプを参照)
with
[
_Ty=std::bitset<100>
]
message : クラス テンプレート メンバー関数 'bool std::less<std::bitset<100>>::operator ()(const _Ty &,const _Ty &) const' のコンパイル中
with
[
_Ty=std::bitset<100>
]
message : コンパイル対象の関数 テンプレート インスタンス化 'bool std::less<std::bitset<100>>::operator ()(const _Ty &,const _Ty &) const' のリファレンスを確認してください
with
[
_Ty=std::bitset<100>
]
message : コンパイル対象の クラス テンプレート インスタンス化 'std::less<std::bitset<100>>' のリファレンスを確認してください
message : コンパイルされている変数テンプレート 'const bool is_empty_v<std::less<std::bitset<100> > >' のリファレンスをご参照ください
message : コンパイル対象の クラス テンプレート インスタンス化 'std::_Tree<std::_Tmap_traits<_Kty,_Ty,_Pr,_Alloc,false>>' のリファレンスを確認してください
with
[
_Kty=std::bitset<100>,
_Ty=int,
_Pr=std::less<std::bitset<100>>,
_Alloc=std::allocator<std::pair<const std::bitset<100>,int>>
]
message : コンパイル対象の クラス テンプレート インスタンス化 'std::map<std::bitset<100>,int,std::less<std::bitset<100>>,std::allocator<std::pair<const std::bitset<100>,int>>>' のリファレンスを確認してください

38 :
わかった、std::mapだとダメなんだな
bitsetがoperator<持ってないからだ
これ定義すればmapでも通ると思うよ
template<>
struct std::less<std::bitset<100>>
{
bool operator()(const std::bitset<100>& lhs, const std::bitset<100>& rhs) const{ return lhs.to_ulong() < rhs.to_ulong();}
};

39 :
といったメッセージが出ております。

40 :
>>35
a.insert( std::make_pair< FOO , BAR >( n, 100 ) );

41 :
まあどうしてもmapにしたい理由がなけりゃおとなしくunordered_mapにした方がいいと思うけど
stdのテンプレートをstdのクラスで特殊化するのは本来は反則だし、unordered_mapの方がだいたい効率いいし

42 :
普通に考えたらこれだろ。
std::make_pair( n, 100 )

43 :
皆さん。情報ありがとうございます。

>>38
試してみた所ビットを33個立てるとstd::overflow が出てしまうようです。
おそらく関数の仕様的な問題だと思うのですが……

>>40
a.insert( std::make_pair<std::bitset<MAX>, int>( n, 100 ) );
とやってみた所エラーが出てしまいました。
この辺の指定はコンパイラが勝手に行ってくれると思っていたのですが、
指定しなければならないのでしょうか?

>>41
std::unordered_map を利用するとうまくいきました。
ありがとうございます。

>>42
すみません。
>>40と同じ理由なのでしょうか?

44 :
bitset の値同士で < での比較ができないから map でエラーってことか。
unordered_map なら == で比較できれば使える、と。

45 :
ああ>>38だとulongにして比較してるからオーバーフローしちゃうな
真面目にビット比較するように関数書けば通ると思う
遅そうだしなおさらunordered_mapの方が良くなるけど

46 :
ラムダ式にテンプレートの型指定ってできないんですかね?
auto f = []<class T>(T) {};
auto f2 = []<class T>() {};
f(1);
f2<int>();
fは引数にその型のパラメータがあるので大丈夫なんですけど、
f2だとコンパイルが通らないです...

47 :
ダミーの引数渡して
decltypeするとかすればいいんじゃね

48 :
>>46
呼び出してるのはあくまでオーバーロードされた関数呼び出し演算子なので、こうする
f2.operator()<int>();
https://wandbox.org/permlink/uVSptZMZErNrL5p3

49 :
>>48
なるほど!ありがとうございます!!

50 :
なるほど
戻り値で判断するのも知りたい

51 :
>>46
auto仮引数ではあかんの?
auto f = [](auto arg) { cout << typeid(arg).name() << endl; };
f(1); //int
f(1.5); //double

52 :
以下のコードを実行すると 'あ' がアルファベットと判定されてしまうのですが、なぜかわかりますか?
Visual C++ 2019でもg++ 7.5.0でも結果は一緒でした(値は違いますが)。
std::locale loc("");
std::locale::global(loc);
std::wcout << std::isalpha(L'あ') << std::endl;
std::wcout << iswalpha(L'あ') << std::endl;

53 :
あはアルファベットだからだろう

54 :
というより、その判定結果だからこそあはアルファベットなんだよ
isalphaがtrueを返すものを現在のロケールにおけるアルファベットと呼ぶと言う方が正しいか

55 :
いや、isalphaがtrueになる文字は各localeで決まっている
isalphaはそれを垂れ流しているだけ

56 :
is_ascii_alpha()のほうが良く使う。

57 :
ありがとうございます
普段は「日本語のアルファベット」とはあまり使わないけれど、
設定されている言語で表現するための文字のことをアルファベットと呼んでいると理解しておきます。

58 :
そもそも英語では普通にひらがなとカタカナを指して"Japanese alphabet"と呼ぶ

59 :
アルファベットはアラビア語が語源?

60 :
あと正確に言うなら日本語のアルファベットは
いろは

61 :
アルファベット=表音文字と言いたいの?

62 :
stlを考えた人は馬鹿だからな。

63 :
isalpha()が2バイト文字環境でいままで使われてきた経緯も知らずに勝手に仕様を変えてしまう馬鹿な人々。
min,maxも伝統的なマクロの存在を知らずに衝突させてしまう馬鹿。
さらに馬鹿なのはSTL作者達なのにコンパイラ処理系作者のせいにしてしまう愚かな烏合の衆たち。

64 :
isalphaは昔のcでもlocale依存だろ

65 :
STLは、なぜあの時代に、ここまで抽象化できたのか?彼らは宇宙から来たのではないか?などと考えてしまうが。

66 :
Windows.hのmin、maxは困りものだよな。

67 :
マクロでminmax書いているほうがどう考えてもバカだよな

68 :
win32の設計とかあーバカコードだなコレってのがちらほら

69 :
>>67
御意

70 :
人類がBOOST_PREVENT_MACRO_SUBSTITUTIONから解放される日は遠い

71 :
STLの方が馬鹿。
今までのものを知らないで独自のものを書くのは簡単。
勉強もせずに独自の日記を書くようなことだから。

72 :
なぜ会社を100社以上バックレたのか?働きたくない男の末路!
https://www.youtube.com/watch?v=C73If3B6MXc
【遅刻早退ドタキャン癖】の絶望的な解説。社会人失格の烙印。
https://www.youtube.com/watch?v=bGarZKcC08s
【悲報】あがり症は完治しない!緊張対策よりも開き直り!
https://www.youtube.com/watch?v=-jMUFZc9vRA
結婚式への参加は『社会の底辺』には地獄!非モテ手当を寄こせ!
https://www.youtube.com/watch?v=oKFrGkpsP8Y
親戚の『葬式』ドタキャンで激怒された!冠婚葬祭パワハラが酷い!
https://www.youtube.com/watch?v=0L-EAndCodE
リボ払い借金500万円の一日!敗者復活ルーティーン
https://www.youtube.com/watch?v=shJMgp6EuW8

73 :
>>59
ちがいます、フェニキア文字由来ですよ
アラビア語はセム語族の中でも後発後進国

74 :
>>72
スレチ グロ

75 :
関数(始点,終点)に馴染めないバカのあぶり出しだったな
関数(始点,個数)に固執してたやつらがSTLで吠え面かかされたw

76 :
https://ideone.com/vJRbP1
ミラーラビン素数判定法を聞いて作ってるんだけど、決定性に確定させるにはここからどうしたらいいですか?

77 :
https://ideone.com/Gq2X2N
無しだとちゃんと出るっぽいです。ということを見せておきます。

78 :
>>65
ソ連で生魚にあたって、入院中に病院の天井みてたら思いついたらしいぜ

79 :
寄生虫より有毒魚かもな
フグみたいな命取りなやつじゃなくバラムツくらいなら腹壊す程度で済む

80 :
>>75がどれに対するレスなのか分からんが
みんな単にスルーしてんだろうなこれは

81 :
バカって素直だな
ちゃんと返事しやがるw

82 :
dtmみたいな楽器を作る場合、音は何らかのライブラリを使うんでしょうか?1から作れるんですか?

83 :
は?
オリジナルは普通にサンプルしたものだろ

84 :
つまり現実の楽器の音

85 :
>>83
シンセとかもサンプルしてるんですか?

86 :
>>85
いかにもデジタル的な音は昔はFM音源だった。
あと、ランダムノイズ的なものも利用。
今は、楽器を物理シミュレーションしている場合がある。

87 :
オートチューン使うと自分の声が楽器みたいになります。

88 :
あるクラスのvectorに対し、個々のクラスのメンバのvectorを返すのってラムダ式でサクッと書けると思うのですが、どうやればいいですか?
struct A { int i; };
vector<A> v(10);
auto v_i = 〜ラムダ式〜 // サイズ10のvector<int>が返る
こんな感じです

89 :
なにいってるのかワカランゴ

90 :
[&]{
std::vector<int> ret(v.size());
std::transform(v.begin(),v.end(),ret.begin(),[](A d){return d.i;});
return ret;
}

91 :
[](A){...}
のところは&A::iでもいいかな

92 :
>>88
https://ideone.com/0s5iRL

93 :
なるほど、std::transformを使うのですね
Pythonみたいにサクッとできたらよかったのですが、ちょっとイメージと違いました
ラムダ式に変な期待、というか勘違いしてました
素直にrange for文で個々にemplace_backするほうが短いし分かりやすいので、今回はそうします
ありがとうございました

94 :
pythonだと[d.i for d in v]って所か?
lambdaじゃないけど

95 :
内包表記だな

96 :
>>90
そういうSTLのbegin,end表記見てると pure Cのqsortの書き方を思い出してしまう。
危険なので毎回良く仕様書を確認してから慎重に使わないといけないという。

97 :
range を使えば楽だろうと思ったんだけど view からコンテナに変換する関数は C++20 には入らなかったの?
Range-v3 にある to みたいなやつ。
https://ericniebler.github.io/range-v3/group__group-range.html#ga555b843264809e3765210c42a66d3c3b

98 :
>>87
diva danceみたいに?

99 :
gdbのプロンプトでsqrtとかabsみたいな数学の関数使えないんだけど使えるようにする方法ある?

100 :
さぁ


100〜のスレッドの続きを読む
プログラミングのお題スレ Part14
くだすれDelphi(超初心者用)その58【Embarcadero】
SDL=Simple DirectMedia Layerでゲームだ
c、Java、pythonを難易度でランク付けして
オブジェクト指向の活用方法を教えて下さい
VBAなんでも質問スレ Part2
pythonista総合スレ【IOSで勉強できる】
Android Studio 2
VBScriptについて必死に話し合うスレ
センター試験: 数学IIBのプログラムについて語るスレ part3
--------------------
山岳ベース事件を知ってるかい? 日本人にサヨク嫌いを植え付けた凄惨なリンチ事件。 [366768626]
★サブカル自撮り・被写体8
清水圭って芸能界にいる意味あんの?PART13
イヤッッホォォォオオォオウ!衝動買い!!249IYH
悲報 モンハンwゲオで1980円の投売りwwwwwwww 17
【ワロタw】頭にハサミが突き刺さって死んでた女性の死因 熱中症と発表 「刺さった経緯は不明」ww
あと何年ぐらいしたらDVDを24倍速とかで作れんの?
50代のリアルクローズ・美容スレ Part8
【Mrドローダウン巌流島】JACK HUMMER ってどうよ
智弁和歌山応援スレ347
ドラゴンポーカー★1314
安倍政権、拉致問題の解決断念か 制裁強化の方針へ
【CMIT】COMIKETCOIN【支援すっぞ】
☆彡★エフゲーニャ・オブラスツォーワ★☆ミ
もう4時か…
【over30】米津玄師 雑談スレ vol.9 【M.T.S.】
【WiiU/NS】ゼルダの伝説 ブレス オブ ザ ワイルド Part 89
ガンダムバトルオペレーションNEXT part234
アイドルマスター(ゲーム版)の声優を語ろう 129週目
MX・tvk・テレ玉・チバ・群馬・とちぎ実況 ★ 58508
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼