20/01/27 00:34:47 8wq+eSeZ.net
>>801
何が言いたかったというと、戻り値(引数型) を解釈する新しい仕様が追加された
というより、数学の数式のようにみたときに一貫した規則に従っていることが
わかるということ。言葉で言えば、
「定義文に置いて、名前を除去すると型名になる」
という規則。
int func(int);
という定義文に置いて、名前であるのは func。だから、funcを除去した、
int(int)
は、funcの型名になる。名前funcの型は、「関数型」だから、これは関数型
という型名そのものとなる。
int a;
の場合、名前であるのは a で、aの型は、int型。だから、この定義文から
名前を除去した int は、int型ということになる。
int (*pFunc)(int);
の場合も、pFuncという変数の定義文であるが、この定義文における名前とは
pFuncであるので、pFuncを除去したところの
int (*)(int);
は、pFuncの型であるところの、「関数へのポインタ型」となる。
つまり、同じ法則にしたがっている。
828:はちみつ餃子 ◆8X2XSCHEME
20/01/27 00:36:25 e3ktUGSY.net
関数型が暗黙に関数ポインタ型に型変換されるルールで引っ掛かってるってことかな?
関数型そのものは C++ が出現した最初から存在すると思うよ。 C にもあるもの。
こういう特殊な変換ルールを強制するために std::decay がある。
829:800
20/01/27 01:15:58.29 jlvCAhZE.net
>>776
typeid で使ってもコンパイル通った。
830:デフォルトの名無しさん
20/01/27 02:13:11 DIOsR0tc.net
RustってどれくらいC++に取って代わるんろうか
互換性以外でC++使う意味ない、みたいな時代はくる?
831:デフォルトの名無しさん
20/01/27 02:15:18 an2yFfMH.net
Rustの話はRustスレでやれ
布教すんな
832:デフォルトの名無しさん
20/01/27 06:56:19 EVyt1Wcb.net
>>783
スマートオブジェ
833:デフォルトの名無しさん
20/01/27 09:23:59 7jNlWdbx.net
C++のライブラリはC++からしか使えないから最高なんです
何故ならヘッダという古臭い仕組みを採用しているからww
なおCOMは
834:デフォルトの名無しさん
20/01/27 09:33:48.52 PH8qw3WE.net
>>798
そりゃauto使いたいからじゃない
その理屈ならそもそもlambda使わずに普通の関数書けばいいってなる
835:デフォルトの名無しさん
20/01/27 10:29:36 nw3WJhJD.net
>>783
[](int b) { return b;}; だけなら明らかにラムダ式の関数ポインタだけど
それをオーバーロードか何かの+で虚無と足し算してんの?
*[](int b) { return b;};
これは掛け算でもするの?
836:デフォルトの名無しさん
20/01/27 10:44:46 EVyt1Wcb.net
関数ポインタではない
スマートオブジェクトへのポインタだ
ただの関数ポインタならファンクタとして機能しない
837:デフォルトの名無しさん
20/01/27 10:54:24 j8/I9hQ5.net
>>811
単項演算子の+だろ
838:デフォルトの名無しさん
20/01/27 11:22:15 PH8qw3WE.net
>>811
はちさんが答え書いてるよ
>>793
839:デフォルトの名無しさん
20/01/27 15:33:55 LGsyX1lU.net
ラムダはデリゲートじゃねー。一個しか保持できんわな。
と遅レス。
840:デフォルトの名無しさん
20/01/27 15:47:35 uUAjQCPR.net
ステートレスラムダって用語が出てこないんだね
stateless lambda
841:デフォルトの名無しさん
20/01/27 15:57:13 uUAjQCPR.net
>>804
template <typename F>
void test(F&&) { cout << 1; }
void test(int(*)()) { cout << 2; }
int func() { return 0; }
int main()
{
test(func); //2
test([]{ return 0; }); //1
}
ステートレスラムダを関数ポインタに渡すのはconversionで
関数を関数ポインタに渡すときのlvalue translationとは違う
842:デフォルトの名無しさん
20/01/27 16:03:26 uUAjQCPR.net
lvalue transformationだ、これは失礼
843:はちみつ餃子 ◆8X2XSCHEME
20/01/27 16:10:02 e3ktUGSY.net
>>817
おっ。 そうなんや。
844:デフォルトの名無しさん
20/01/27 16:16:57.88 uUAjQCPR.net
g++だと、これ通るw
auto closure = []{ return 0; };
using funcp = int(*)();
test(closure.operator funcp());
845:デフォルトの名無しさん
20/01/27 16:29:40 Xjs2F3Iq.net
[]の後()不要だっけ?
846:デフォルトの名無しさん
20/01/27 16:30:47 an2yFfMH.net
引数がないなら省略可能
847:はちみつ餃子 ◆8X2XSCHEME
20/01/27 17:56:21 e3ktUGSY.net
>>814
ワイはどちらかというとはちみつより餃子の方にアイデンティティがあるので…・…
848:デフォルトの名無しさん
20/01/27 18:43:12 Be1ain3H.net
>>822
勉強になりました。
849:デフォルトの名無しさん
20/01/27 19:32:41 EVyt1Wcb.net
>>81
850:2 ×スマートオブジェクトへのポインタだ ○スマートオブジェクトだ
851:デフォルトの名無しさん
20/01/28 09:26:07 ClFSc0Tc.net
しょうもないシンタックスシュガーの話が好きな奴多いね。
852:デフォルトの名無しさん
20/01/28 10:18:33.58 iJMYk+LH.net
gotoおじさんまた登場だよ
853:デフォルトの名無しさん
20/01/28 10:25:01.77 ciqR13vi.net
>>827
踊るポンポコリンの「インチキおじさん登場」を思い出した。あんまり間違ってないだろう。
854:デフォルトの名無しさん
20/01/28 10:44:40 wcDzWZFN.net
ボコられるの好きなんか? 変態めw
855:デフォルトの名無しさん
20/01/28 10:49:48 ivYV6JvB.net
物事は適切に伝えろ
それが出来ないなら口を開けるなカスども
856:デフォルトの名無しさん
20/01/28 10:52:11 ivYV6JvB.net
ラムダが関数ポインタとかほざいてるカスが居てびっくりしたわ
857:デフォルトの名無しさん
20/01/28 11:05:50.35 AXFiEKC0.net
>>831
インライン展開されるから?
858:デフォルトの名無しさん
20/01/28 11:12:08.47 tLdUC4IA.net
>>831
>>783 のこと?
859:デフォルトの名無しさん
20/01/28 11:23:05 ijxMtirO.net
個人的にはテンプレートなのに糞のSTLよりも
マクロωのQtの方がうまくやれてる実用的だと思う
860:デフォルトの名無しさん
20/01/28 11:24:46 ijxMtirO.net
>>758
typedefに夢観すぎ
861:はちみつ餃子 ◆8X2XSCHEME
20/01/28 11:30:08 jIEBko3c.net
まあ個人的な感想は個人的な感想だからなぁ。
俺は Qt に対してなんやこのクソはとしか思わんが、
広く使われている現実がある以上は実用性は高いんだろう。 たぶん。
862:デフォルトの名無しさん
20/01/28 11:38:43 9AkNqXrr.net
Qtのmocは何か嫌だ
863:デフォルトの名無しさん
20/01/28 11:45:43 wcDzWZFN.net
>>835
ああ、usingを使うべきだったな
typedefなんてダセーもんもういらねえって
頭ではわかってるんだが長年の癖でぽろっと出ちまう
864:デフォルトの名無しさん
20/01/28 12:03:55 AXFiEKC0.net
マクロを名前空間に閉じ込められるようになれば、マクロの害悪の何割かは減らせるはず。
865:デフォルトの名無しさん
20/01/28 15:45:53 wcDzWZFN.net
ということは名前空間をプリプロセッサが処理せにゃあかんな
translation phaseを根本的にぶっ壊さないと無理だと思うが
866:デフォルトの名無しさん
20/01/28 16:34:43 ogCuVxV7.net
typedefが駄目で、usingが好まれる理由を教えてください。
867:デフォルトの名無しさん
20/01/28 16:38:19 AXFiEKC0.net
否定的な視点から散々な言われ方をされがちなC/C++のマクロだけど、
Java/C#/Python/Pwel/Rubyに似たテキスト変換がないことに物足りなさを感じることが多いのも事実。
868:はちみつ餃子 ◆8X2XSCHEME
20/01/28 16:39:59 jIEBko3c.net
>>841
私が思いつくのは
・ using は名前を導入するという一巻した意味規則がわかりやすいから
・ using はテンプレートに出来るから
・ typedef だと複雑な型定義をするときに肝心の新しい名前が中の方にあって見づらい
869:デフォルトの名無しさん
20/01/28 16:44:17 AXFiEKC0.net
typo。PwelじゃなくてPerl。Perlはめっきり影が薄くなった。
PerlはGit for Windowsにバンドルされているので世の中の大部分のプログラマーがすぐに使える環境にあるのだが、
Git本体はPerl依存を減らす方向に進んでいるらしい。
870:はちみつ餃子 ◆8X2XSCHEME
20/01/28 16:44:19 jIEBko3c.net
>>842
Cプリプロセッサを Java やら Python やらにつこうてもええんやで。
そういえば cpp を使うことを (習慣的に) 想定してる言語って C/C++ を除けばHaskell (GHC) くらい?
汎用プリプロセッサとして使うなら M4 あたりの方が賢いしなぁ……。
871:デフォルトの名無しさん
20/01/28 17:01:24 wcDzWZFN.net
>>841
たとえばこういう場合
#define STR char*
STR a, b; //これ、どうなる?
もしこうなっていたら
using STR = char*;
STR a, b; //これはどうだ?
おまえさんの好みに合うのはどっちだ?
そこに答えがある
872:デフォルトの名無しさん
20/01/28 17:02:35 wcDzWZFN.net
>>841
あ、すまんtypedefか
typedef 内容ごちゃごちゃ 名前;
using 名前 = 内容ごちゃごちゃ;
体裁が揃えやすいのはどっちだと思う?
873:デフォルトの名無しさん
20/01/28 17:12:58 ijxMtirO.net
typedef も using もエイリアスという点では
char * と STR の区別が出来ないから後で困る
874:デフォルトの名無しさん
20/01/28 17:15:55 wcDzWZFN.net
関数ポインタの別名を作るときなんぞ
typedef int (*funcp)(); //内容ごちゃ名前ごちゃ
using funcp = int(*)(); //名前 = 内容ごちゃごちゃ
という違いが出る
875:デフォルトの名無しさん
20/01/28 17:25:49 CkOmcsmE.net
usingを使うと03脳が発狂する
876:はちみつ餃子 ◆8X2XSCHEME
20/01/28 17:28:55 jIEBko3c.net
でもまあヘッダファイルを C と C++ の両方で (マクロで少し切り分けて) 使いたいってことはあるから、
そういうときは typedef にしといた方が共用できる部分が多くて楽ってことはある。
877:デフォルトの名無しさん
20/01/28 17:34:48 ijxMtirO.net
>>849
そこだけだと構文糖衣以上のメリットはないよね
878:デフォルトの名無しさん
20/01/28 17:46:32 aDOyN6/W.net
どっちでもええやん
879:はちみつ餃子
20/01/28 17:55:35.77 jIEBko3c.net
>>849
ポインタまわりはテンプレートの記法で書けば統一的でわかりやすい気がするが、
たぶん他の名前とかぶらないようにするためか長めの名前なのがちょっとなぁ……。
using funcp = std::add_pointer_t<int(void)>;
880:デフォルトの名無しさん
20/01/28 18:11:09 IabgCQwH.net
こういうのもある。
URLリンク(qiita.com)
881:デフォルトの名無しさん
20/01/28 18:21:36 jS595giQ.net
>>842
PL/1はいいぞ
制御構文としてif程度しか使えないしょぼいC/C++マクロと違ってプリプロセッサでDOループやGOTOとかも使えるしサブルーチンの定義すらできるぞw
URLリンク(en.m.wikipedia.org)
882:デフォルトの名無しさん
20/01/28 19:30:49 jjtOLQOh.net
そういえば最近Boost.Preprocessorを使った楽しい黒魔術の話題を聞かない気がする
あれってまだ開発継続してるの?
883:デフォルトの名無しさん
20/01/28 20:01:44 KHL1SP2c.net
>>849
typedefの方が簡単じゃん
コピペして*付けて()付けるだけ
884:デフォルトの名無しさん
20/01/28 20:11:17 lz3/6EQt.net
マジでか・・・
885:デフォルトの名無しさん
20/01/28 20:52:12 wcDzWZFN.net
>>852
おまえさ、usingはテンプレートにできること、まさか知らないの?
886:デフォルトの名無しさん
20/01/28 22:15:34.91 aDOyN6/W.net
小学生かよw
887:デフォルトの名無しさん
20/01/28 23:16:15.60 kww99AmH.net
CPPってもうメンテされていないようで怖い
#define FOO 123 // comment
とはとうてい恐ろしくてどうしても書けず、
#define FOO 123 /* comment */
と書いてしまうま
888:デフォルトの名無しさん
20/01/29 11:25:21 HJZ6WUGV.net
N4713
5.2 Phases of translation
3
Each comment is replaced by one space character. New-line characters are retained.
889:デフォルトの名無しさん
20/01/29 13:26:03.72 zE4LbE2k.net
>>860
そこだけって書いてあるのに脳内で読み飛ばずのは
国語の成績悪かったやつの特徴
890:デフォルトの名無しさん
20/01/29 13:40:36.68 HJZ6WUGV.net
>>864
おい852本人、「構文糖衣以上のメリットはない」という自分の言葉から逃げるのに
そういう言い訳は見苦しいぞ
今さら吐いた唾を飲むなよ
891:デフォルトの名無しさん
20/01/29 14:13:02 pjwqAxyM.net
なぜ喧嘩腰なのか。
892:デフォルトの名無しさん
20/01/29 14:13:39 Yrzd5mtl.net
喧嘩腰がC++民のデフォだから
893:865
20/01/29 14:36:19 WeNDQDRz.net
俺は争いは好まないが、
平和的な話し方をしないやつには
場合にもよるが嫌悪感を露にすることもある
894:デフォルトの名無しさん
20/01/29 16:47:35 pjwqAxyM.net
戦士の血がそうさせると言いたいのか。
895:デフォルトの名無しさん
20/01/29 16:57:27 HJZ6WUGV.net
平和を愛するという点で共感が得られず
こちらが下手に出ることのベネフィットがない相手には容赦は無用ということだ
896:デフォルトの名無しさん
20/01/29 17:24:59 pjwqAxyM.net
戦士と戦士が巡り合ってしまうと、バトル・フィールドが形成されるシステムってことか。
897:デフォルトの名無しさん
20/01/29 17:32:22 YYjUIAq1.net
>>870=ID:VrR0aqw1
マウント取りたいだけの初心者だから相手しない方がいい
898:デフォルトの名無しさん
20/01/29 17:39:26 iDUguYS7.net
>>867
多くのC++民が喧嘩腰なのでなく、一部の喧嘩好きの戦闘民族のレスが目立ってるだけじゃね。このスレから相手に勝つことだけが目的の無意味なレスの応酬を取り除いたら、1/10も残らないと思うぞ。
899:デフォルトの名無しさん
20/01/29 17:54:15 YYjUIAq1.net
いや最近のC++に対するちょっと否定的な意見が出ただけで
過剰反応する住民のせいでもあると思うぞ
で、そういう奴に限って間違いを素直に認めたりなどしないからな(代理戦争で議論するやつ特有のパターン
900:デフォルトの名無しさん
20/01/29 17:55:39 HJZ6WUGV.net
>>872
正直に言えよ、「gotoの何が悪いのか詰問されると困るから」相手しないと
マウント取られそうでヤバいんだろw
901:デフォルトの名無しさん
20/01/29 17:59:00 YYjUIAq1.net
俺ID:loc7kxiYだからgotoの話はしてないよ
で、前にも聞いたけど反論まだ?
902:デフォルトの名無しさん
20/01/29 18:07:15 HJZ6WUGV.net
ああ、そのIDのときはSTLの話だったな
そこでマクロの話も出てきていたが
隠すべきものと隠してはならないものの区別がつかない点で
gotoの何が悪いのかわかってないやつとプロファイリングが一致するんだよ
俺の正直な気持ちを教えといてやる
マウント取りたいんじゃなく、頭からアホにしてんだよ
こんなやつをマウントできたからって偉くも何ともねえ
903:デフォルトの名無しさん
20/01/29 18:08:48 YYjUIAq1.net
いやSTLじゃなくてテンプレートを持て囃しすぎって話だったんだが
まぁいいや
904:デフォルトの名無しさん
20/01/29 18:20:58.67 pjwqAxyM.net
おまえが犯人か。
905:デフォルトの名無しさん
20/01/29 18:31:24.45 UhF+CSx9.net
なんかおかしなのがいるよね
圧倒的にこっちが勝っている状態で意味不明な反論?してきて意味不明だから返せないと逃げたとか言う奴
906:デフォルトの名無しさん
20/01/29 18:33:57.19 8i6C3PjP.net
5chなんてそんなところ
何を期待してるんだか
907:デフォルトの名無しさん
20/01/29 18:50:11.91 HJZ6WUGV.net
明日早いから失礼するとは言ったが
それを謎変換せにゃならん切羽詰まったやつがいるのかw
908:デフォルトの名無しさん
20/01/29 19:02:21.51 pjwqAxyM.net
gotoは初期化を飛び越えることが出来ないと聞きました。
909:デフォルトの名無しさん
20/01/29 19:09:37.44 cVCtJzaf.net
usingってテンプレート使えたっけ
910:デフォルトの名無しさん
20/01/29 19:11:38.78 pjwqAxyM.net
使えます。
911:デフォルトの名無しさん
20/01/29 19:12:44.99 pjwqAxyM.net
初期化を飛び越えることができるバーストモードgotoないでしょうか。
912:デフォルトの名無しさん
20/01/29 21:34:59.03 QR9K5cuD.net
longjump
913:デフォルトの名無しさん
20/01/29 22:05:22.85 HJZ6WUGV.net
465のlongj【u】mp野郎まだいたのかwww
914:デフォルトの名無しさん
20/01/29 22:22:07.51 G0q9jZbg.net
バカほど多くの機能を使いたがるってのがプログラマーが解決しなければならん問題だな。
915:デフォルトの名無しさん
20/01/29 22:27:38 pjwqAxyM.net
なんだと!
あやまりたまえ!
916:デフォルトの名無しさん
20/01/29 22:29:42 /kkeNUel.net
使いどころが悪いって指摘ならまだしも、ある機能を使い所で使うなとか言うのは結局俺が分からんからってだけだよね
917:デフォルトの名無しさん
20/01/29 22:32:41 G0q9jZbg.net
使いどころが本当に正しいか頭使って考えてりゃね。
バカは流行りだから、なんかカッケーから以上に何も考えてないから
レガシー化するわけだ。
んでまた新しいものに飛びついていく。
918:デフォルトの名無しさん
20/01/29 22:33:49 vJ6+7lg9.net
仕事ならそのコードがメンテできる人が他にどれだけいるかで考える
919:デフォルトの名無しさん
20/01/29 22:49:46 HJZ6WUGV.net
メンテできるやつが「オレ」以外の全員でもか? アホwバカwww
920:デフォルトの名無しさん
20/01/29 22:56:36 pjwqAxyM.net
うむ、お前以外の全員でもだ。
921:デフォルトの名無しさん
20/01/29 22:57:52 vJ6+7lg9.net
もうそろそろ寝る時間じゃないの?
922:デフォルトの名無しさん
20/01/29 22:59:28 pjwqAxyM.net
かなり眠いです。
923:デフォルトの名無しさん
20/01/29 23:16:21 gRkDTmNL.net
C++03しか知らないんだけど
C++17まで修めるにはつるピカ先生の御本を読めばいいですか?
924:デフォルトの名無しさん
20/01/30 00:33:56 x7BjuJ+g.net
cppreferenceで十分
925:はちみつ餃子 ◆8X2XSCHEME
20/01/30 00:49:18 v/8wm2Cj.net
どれかひとつじゃなきゃいかんてことはないんだ
926:デフォルトの名無しさん
20/01/30 00:52:54 D1C6nROc.net
つるぴか先生の本は聖典だ
お守りのようなものなので読まなくても買って横においときなさい
927:デフォルトの名無しさん
20/01/30 16:01:21 sB8XzCcn.net
cppreferenceは循環参照みたいになってて使い辛い
928:はちみつ餃子 ◆8X2XSCHEME
20/01/30 16:02:36 v/8wm2Cj.net
実際にお互いに連携するからそう綺麗に木構造にはならんのやで。
929:デフォルトの名無しさん
20/01/30 16:09:47 6JJixhdc.net
1つの情報源しか見てないとサイトから脳へバグが伝染るぞ
930:デフォルトの名無しさん
20/01/30 16:11:35 sB8XzCcn.net
cppreferenceは調べるためのサイトじゃなくて
忘れてたことを思い出すためのサイトって意味なら
まあまあ同意
931:デフォルトの名無しさん
20/01/30 17:00:38 6JJixhdc.net
ネットじゃなく、ローカルに俺メモを作るのは基本だね
932:デフォルトの名無しさん
20/01/30 17:05:52.06 CwICoFVZ.net
作らなくてもcppreferenceをcloneすればいいじゃないか
933:デフォルトの名無しさん
20/01/30 17:15:03 6JJixhdc.net
脳内の理解を、きちんと清書してみると
自分の言ってることがおかしいのに気付くことがよくあるんだよ
934:デフォルトの名無しさん
20/01/30 17:26:38 Z7o7STkD.net
認知症の可能性が。
935:デフォルトの名無しさん
20/01/30 17:51:33 6JJixhdc.net
最近の俺はそう言われても仕方ないアホなことをよくやらかすが
まだ若く元気だった頃から、俺メモでセルフチェックはやってるよ
936:デフォルトの名無しさん
20/01/30 18:12:36.69 Z7o7STkD.net
みんなのメモを集めれば・・・
937:デフォルトの名無しさん
20/01/30 18:36:17 6JJixhdc.net
女子社員のメモを集めたら最強マニュアルができたなんてエピソード昔聞いたことある
938:はちみつ餃子
20/01/30 18:38:54.14 v/8wm2Cj.net
cpprefjp にコミットしてくれ。
939:デフォルトの名無しさん
20/01/30 19:00:51.60 AVLJabA/.net
ビャーネ・ストラウストラップ の第四版は、C++11までですよね?
940:デフォルトの名無しさん
20/01/30 19:06:12.13 6JJixhdc.net
そら当たり前でんがな
承知の上で読む分には何も問題ないけどな
941:デフォルトの名無しさん
20/01/30 19:27:51.04 AVLJabA/.net
質問者は、C++17まで収めたいと思っているようですが。
942:はちみつ餃子
20/01/30 19:31:35.00 v/8wm2Cj.net
C++11 までわかってればあとは cpprefjp で差分を見れば充分でしょ。
943:デフォルトの名無しさん
20/01/30 19:32:19.73 x7BjuJ+g.net
03→11の乖離は大きいが14、17はそれほどでもない
20、23でまた大きく変わるが
944:デフォルトの名無しさん
20/01/30 19:36:37.08 6JJixhdc.net
>>918
御意
945:デフォルトの名無しさん
20/01/30 19:51:01 6JJixhdc.net
しかしメジャー2連くるかねえ
段階的変更という大人の配慮を忘れたら
C++終わると思うが
946:デフォルトの名無しさん
20/01/30 19:54:30 R974cSCc.net
もう変える必要なんかないだろうに
947:デフォルトの名無しさん
20/01/30 19:54:36 Z7o7STkD.net
まだ終わってなかったんだ。
948:はちみつ餃子 ◆8X2XSCHEME
20/01/30 19:57:26 v/8wm2Cj.net
コンセプトとモジュールの導入は C++er の悲願だと思っていたがそうでもないの?
クソみたいなマクロを殺すのがだいぶん上手くいったから次はクソみたいな SFINAE を殺そうという動きだと理解してる。
949:デフォルトの名無しさん
20/01/30 20:01:14 Z7o7STkD.net
コンセプトは欲しいです。
950:デフォルトの名無しさん
20/01/30 20:25:47.17 /5vTOygk.net
> ポインタライクなオブジェクトからアドレスを取得する std::to_address() 関数 (P0653R2)
> ポインタライクなオブジェクトを引数にとり、それが表すのと同じアドレスを生ポインタで返す関数
> std::to_address(p) が追加されます。オブジェクトがポインタ型の場合はその値を返し、それ以外の場合、
> std::pointer_traits<Ptr>::to_address(p) の特殊化が定義されていて使えればその戻り値を、
> そうでない場合は std::to_address(p.operator->()) の戻り値を返します。
ついにポインタのことをアドレスって言っても良くなったんだな
俺の学生時代にはポインタの事をアドレスと言って良く怒られたものだ
懐かしい思い出
951:デフォルトの名無しさん
20/01/30 20:36:13.05 rpXeID84.net
変数は実は二つの値から出来ている
一つは変数の中に入っている値
もう一つは変数のアドレスの値
この二つだ
変数の二重性がC言語の理解を無駄に難しくしてる
アドレスの値が入ってるのは機械語から言えば当然だが
変数なる計算機科学の概念がそこに中途半端にドッキングすると複雑になる
ポインタで躓くヤツが多いのは機械語と高水準言語、その中間に位置するC言語の変数がもつ二重性のせいだ
952:デフォルトの名無しさん
20/01/30 21:07:45 Z7o7STkD.net
ところでコンセプトって何ですか?
953:デフォルトの名無しさん
20/01/30 21:12:58 jdq+FHbl.net
ID:Z7o7STkD
このスレはこういう精神病みたいなやつ多くない?
954:デフォルトの名無しさん
20/01/30 21:22:32 cFc5UMZy.net
>>923
イキった初心者に影響受けすぎ
955:デフォルトの名無しさん
20/01/30 21:34:14 r1oioh07.net
ハゲの悲願だろ
956:898
20/01/30 21:40:54 XvvyOq64.net
皆さん情報ありがとう
ひとまず先生のWeb版「C++入門」をやってみることにしました
957:デフォルトの名無しさん
20/01/30 21:41:00 Z7o7STkD.net
なんだと!
958:デフォルトの名無しさん
20/01/30 22:11:01 6JJixhdc.net
operatorの暗黒面を知れという実習問題
ここでみんなでやってみないか?
959:デフォルトの名無しさん
20/01/30 22:19:13 FR6/17T7.net
単純なキーワード検索できないことぐらいでしょ。暗黒面。
960:デフォルトの名無しさん
20/01/30 22:24:37 R974cSCc.net
operatorは自明な場合しか使わない
構造体代入のように見えて変数の逐次代入してあって、
後で追加された変数が処理されていなかったりして気づかないとかこわい
961:デフォルトの名無しさん
20/01/30 22:26:34 /1tMjbDQ.net
暗黙変換と絡んだ地獄を知らんのか
962:デフォルトの名無しさん
20/01/30 22:36:05 Q1Ec3Ov8.net
>>933
gotoおじさんに答えさせようぜ
963:デフォルトの名無しさん
20/01/30 22:42:34 o/4wL0K/.net
演算子の多重定義とテンプレートの組み合わせはチョー便利
gotoと同じで手放せない便利さ…!
964:デフォルトの名無しさん
20/01/30 23:30:29 HitChVTH.net
>>925
ポインタとアドレスは別物でしょ
965:デフォルトの名無しさん
20/01/31 00:09:44 3dxm9JOP.net
同じといや同じだし違うといやぁちがう
普通の脳味噌のやつには適当に「こまけぇことはいいから同じようなもんだ」と
いっとけば通じるが、このスレにウヨウヨいるような偏執狂タイプの連中に
うかつに「同じ」なんていうとポインタをアドレスと同じように整数を足すと
そのぶんアドレス値が進むと思いこむやつがでてくるからうかつに言えないだけ
966:デフォルトの名無しさん
20/01/31 00:10:58 v4E0eL1J.net
>std::to_address()
^^^^^^^
>それが表すのと同じ「アドレス」を「生ポインタ」で返す関数
となってるので公式で
ポインタ=アドレス
967:デフォルトの名無しさん
20/01/31 00:14:07 70BTs5bI.net
>>941
アドレスの値を生ポインタの型として返す、ということだから、
この文脈では明確に別の意味だろ
968:デフォルトの名無しさん
20/01/31 00:15:57 v4E0eL1J.net
いや、to_address() という名前の関数が生ポインタを返すから
ポインタ=アドレスで問題ない
そうじゃないんなら、to_pointer() っていう関数名にするだろ、普通
そこが to_address() となってる
969:デフォルトの名無しさん
20/01/31 00:21:59.86 88e+X9K2.net
オプションだし。
アドレスを返せないファンシーポインタもあるということでは。
970:デフォルトの名無しさん
20/01/31 00:23:11.07 v4E0eL1J.net
俺は古いタイプの人間だから俺の感覚で言うと
to_address() って言えば、生のアドレス値が整数型で帰ってくるという低レベルなイメージ
それが生ポインタが帰ってくるというなら to_pointer() としたいところ
ところが生ポインタが帰ってくるのに to_address() となってるわけだから
ああなるほど、時代は変わったなぁ、と
その辺 C++ の人たちはうるさいと思っていたんだがねぇ
もう公式で ポインタ = アドレス なのね
971:デフォルトの名無しさん
20/01/31 00:24:13.53 MjAWY572.net
pointer指すもの
address指す先
じゃね
972:デフォルトの名無しさん
20/01/31 00:25:21.16 88e+X9K2.net
addressofで返ってくるのもポインタだし。
973:デフォルトの名無しさん
20/01/31 00:27:00.86 88e+X9K2.net
ファンシーポインタからポインタをとるときに使うもののような気がする。
それが不可能なこともあるからオプションなのでは。
974:デフォルトの名無しさん
20/01/31 00:35:50.96 88e+X9K2.net
ポインタ→ポインタあるいはファンシーポインタ・・・pointer_to。
ポインタあるいはファンシーポインタ→ポインタ・・・to_address。
ってことで、ポインタの意味は変わっていないんじゃないのかな。
975:デフォルトの名無しさん
20/01/31 00:42:12.84 v4E0eL1J.net
簡単に考えれば、生ポインタとスマートポインタetcを区別するために
生ポインタの事をアドレスと言ってるわけだよ
スマートポインタetc -> ポインタ
生ポインタ -> アドレス
っていう格上か格下げか知らんが、一つずらした呼び名になってるんだ
俺みたいな古い人間には受け入れがたいものもあるが
「生ポインタなんか使わねーよスマポこそがポインタであり生ポなんかアドレスとでも呼べばよい」
という今の時代に合わせた考え方なんだろう
スマポetc(ポインタ)から生ポ(アドレス)に変換するから to_address()
ちょうど Java のオブジェクトを指す変数は C++ 的には参照だが
Java の人たちはオブジェクトと言うし、そう考えてる、ってのに似てる
976:デフォルトの名無しさん
20/01/31 00:44:40.52 MjAWY572.net
javaの変数はポインタだろ
代入したら指す先が変わるし
null持てるし
まあ演算できない劣化版だが
977:デフォルトの名無しさん
20/01/31 00:46:15.67 S0Mdice7.net
常識なんかどんどん変るからな、とくにC/C++みたいな歴史が長い世界は
ピュアCの時代にはそもそもポインタといえばたしかにその値がアドレス(位置情報)
として機能する値と一致していたがファンシーポインタがある現代では
"ポインタ"の実体とそれが保持したい情報(アドレス情報)は一致すると思わない事が常識になる
"ポインタ"は情報としては何かの位置を差す値を保持はしているがそのオブジェクト
自体は保持しているアドレス情報とはまったく無関係のメモリ空間にある何かである
現代の感覚でいうともし std::to_pointer というネーミングにすると
"は?ポインタをポインタに変換するってどういう意味だよ????"とむしろ混乱の元になるってわけだ
978:デフォルトの名無しさん
20/01/31 00:46:56.64 v4E0eL1J.net
なんか長々書いたが
今の時代、スマポこそがポインタであって、もはや生ポインタはアドレスなんだよ!
人間も父が爺になって子が父に繰り上がっていくものだから
時代と共に名実ともに出世していくのは普通の事なのかもしれない
979:デフォルトの名無しさん
20/01/31 00:47:48.87 88e+X9K2.net
ちょっと江添呼んできて。
電車代出すから。
980:デフォルトの名無しさん
20/01/31 00:51:32 v4E0eL1J.net
ただどうしても言いたいのは
生ポインタは address じゃなくても
別に raw_pointer とか native_pointer で良くね?
address って言ったら、ただの数値のイメージがあるわ
981:デフォルトの名無しさん
20/01/31 00:54:08 88e+X9K2.net
アドレスに無料で型情報をつけるアイデアをひらめいたときは、俺って天才かも?って思ったんだろな。
982:デフォルトの名無しさん
20/01/31 00:54:15 S0Mdice7.net
>>951
我々の感覚からすると実際その通りなんだが、Java脳の人々にとってはそうではない
彼等はスタックという感覚も非常にうすい
なぜならオブジェクトはスタックにはとれず、常に new (ヒープ)しかないから
我々はクラスのインスタンスがスタックにあるのかヒープにあるのかは無意識に常に
判断する事に慣れているが、これをjava脳の人に説明するのはしばしば困難なときがある
983:はちみつ餃子 ◆8X2XSCHEME
20/01/31 00:54:31 T8rV4kLc.net
>>929
宣言をヘッダファイルに分割する方式は C++ の意味不明さの根源のひとつじゃない?
それで宣言と定義を分ける運用がキッチリできるのならそれはそれでよかったけど、
テンプレートとインラインの活用でヘッダファイルに書く分量がだいぶん多くなってヘッダファイルってなんだっけって気持ちになる。
このあたりの仕組みは再編すべきでしょ。 モジュールは要るって。
コンセプトもなぁ、型に制約を付けるって普通にやりたいことじゃん?
ちょっとした制約を付けるためにまわりくどいメタプログラミングなんてやりたくないよ。
現代的な静的型付け言語ならあって然るべき機能が順当に入るってだけのこと……
と思ってたら延び延びになっちゃったから待たされてる感じが強い。
984:デフォルトの名無しさん
20/01/31 00:55:51 MjAWY572.net
javaはヌルポ出すくせにポインタじゃないのか
ポはなんの略なんだろう
985:デフォルトの名無しさん
20/01/31 01:06:28 /0JfR++J.net
>>941
公式は "A value of a pointer type ... represents the address of the first byte ..."
「ポインタ型の値はアドレスを表す」となってる。
URLリンク(timsong-cpp.github.io)
アドレスに加えて他の情報を持つ可能性は否定されないので、いろんな人が言ってるように
厳密にはイコールではないね。
986:デフォルトの名無しさん
20/01/31 01:08:43 U1PsHN2Y.net
>>958
要らんなどと一言も言ってないぞ
言い回しがそれっぽいってだけ
だいたいモジュールはまだ20では標準ライブラリには使われないし
「コンセプトはよ来い」とか上級者ぶりたい初心者がよく言うけど、その中に「自分で実際にコンセプトを定義する奴」などほぼ居ないだろ
個人的にはこれまでSFINAEでどうにかしてたメタプログラミング用の要件チェックのコードを
全部コンセプトに直すのクソだるい(便利になるだろうけどエラーメッセージ以外で実感するのはまだまだ先)
だいたい来るのはわかってんだからもう一喜一憂するような話でもない
987:デフォルトの名無しさん
20/01/31 01:08:59 70BTs5bI.net
今も昔もアドレスとポインタの意味は変わってないんでないの?
「アドレス」=メモリ上のオブジェクトの位置を表す番地(具体的には整数値)
「ポインタ」=
(1)何らかのアドレスを格納したT*型の変数(オブジェクト)。生ポインタ。
(2)「アドレス」と同じ意味で用いる
昔からポインタ(2)の用法でアドレスとポインタを同一視して使われるだけで、ポインタ(1)の用法で「アドレス」とは言わんでしょ。
to_addressの件も、引数として受けとるオブジェクトに対する「アドレス」の値を返すのだからto addressと言う命名で適切だろう。ここでto pointerとしたら直感的に「ポインタ」(1)の意味で解釈されかねず、下手な命名だと思う。
988:デフォルトの名無しさん
20/01/31 01:50:15 kN8V6wKW.net
言葉遊びというか言葉の意味の違いでかみあってないだけじゃろ
こうした文脈でのアドレスという言葉を
アドレス=機械語コードで使うのと同じ表現で指定されてるメモリアドレス
の意味に無自覚に限定してるのか
アドレス=なんらかの形で指定されてるメモリアドレス
のゆるい意味で使っているかの話じゃ
ポインタはアドレスではない、は前者の意味のアドレスに対する話で
今回の話も含めたC/C++の規格レベルでのアドレスは一貫して後者の意味じゃて
989:デフォルトの名無しさん
20/01/31 02:10:23.02 X6LytJOH.net
>>913
管理者がアレだから♀
990:デフォルトの名無しさん
20/01/31 07:12:22 CZDp2h8t.net
アドレスはオブジェクトの番地
ポインタはアドレスを格納する変数
991:デフォルトの名無しさん
20/01/31 08:39:51.12 v4E0eL1J.net
しかしアドレスを返すと言いながら
ポインタで返し、型情報が付いてきているわけだが
992:デフォルトの名無しさん
20/01/31 08:42:38.23 v4E0eL1J.net
緩い意味でのどこかを指し示す意味でのアドレスと言っているなら
スマポもアドレスになるから、to_addressの意味がさらにもう何が何だか
993:デフォルトの名無しさん
20/01/31 08:50:06 1ZJZZZs9.net
ポインタというよりvoid*だね
void以外のポインタは実体の型により訳が変わる点が
単なるアドレスと違うところで
994:デフォルトの名無しさん
20/01/31 10:02:33 v4E0eL1J.net
いやでも、to_address() の戻り値の型は
void* ではなくて、ちゃんとした型情報を持った普通のポインタ型だよ
void* にはならないよ
995:デフォルトの名無しさん
20/01/31 10:06:23 yrj+fbAX.net
またつまんない話で盛り上がってんのな
996:デフォルトの名無しさん
20/01/31 10:42:46 70BTs5bI.net
>>966
返されるのはあくまでアドレス(番地)の値だろう。型情報としてT*型を持つが、それはC/C++ではすべての式や値が型を持つから当たり前の話であって、型を持つからアドレスとは呼ばないというのはおかしな話だと思う。
997:デフォルトの名無しさん
20/01/31 11:36:09.10 v4E0eL1J.net
>型を持つからアドレスとは呼ばないというのはおかしな話だと思う。
つまりは ポインタ=アドレス って事ね
998:デフォルトの名無しさん
20/01/31 11:45:36 GGrzMUVS.net
ポインタってのは変数のことでその中身はアドレスって第3版の時点ではっきり書かれてるぞ
型を持ってるのもあくまで変数の方だ
999:デフォルトの名無しさん
20/01/31 12:34:07 AatGgooz.net
ヌルポ
1000:デフォルトの名無しさん
20/01/31 12:35:25 v4E0eL1J.net
それは当たり前
そういう話ではなく
う~ん、どういえばいいか
例えば、年齢を得る関数 int get_age() ってのがあったとして
俺は別にこれに疑問を持たんし、何とも思わない
to_address
それは int に対して age の方が高度で抽象的な概念になってるから
ところが pointer to_address() の場合はこれが逆になってて
pointer の方が address より高度で抽象的な概念になってる
だからこう、本質的に気持ち悪いというか
先の例で言えば
まぁ適切な例かは分からないが
age_t get_int()
ってなってたらキモイだろう
1001:デフォルトの名無しさん
20/01/31 12:37:15 v4E0eL1J.net
なんか途中で送信してしまった
それは当たり前
そういう話ではなく
う~ん、どういえばいいか
例えば、年齢を得る関数 int get_age() ってのがあったとして
俺は別にこれに疑問を持たんし、何とも思わない
to_address() と何が違うか
それは int に対して age の方が高度で抽象的な概念になってるから
ところが pointer to_address() の場合はこれが逆になってて
pointer の方が address より高度で抽象的な概念になってる
だからこう、本質的に気持ち悪いというか
先の例で言えば、まぁ適切な例かは分からないが
age_t get_int()
ってなってたらキモイだろう
1002:デフォルトの名無しさん
20/01/31 12:45:36 GGrzMUVS.net
なんか勝手に幻想抱いてるけどポインタに入れるものは常にアドレスだから
何もおかしくない
1003:デフォルトの名無しさん
20/01/31 12:46:08 YmbKsQW3.net
VLTのto_addressは欲しい
1004:デフォルトの名無しさん
20/01/31 12:46:37 v4E0eL1J.net
でさ、
age_t get_int() ってのを見たとき
「age_t の中身は int だし
int を get してそれが age_t に入っているのだから
解釈としては問題ない」
って感じのことを言ってるレスが結構あったけど
俺はなんか違うような気がするって言ってるわけ
1005:tォルトの名無しさん
20/01/31 12:48:59 v4E0eL1J.net
具体的には >>977 とかね
age_t の中身は常に int だから~的な
だとしても age_t get_int() とは書かんだろう、というのが俺の主張だから
1006:デフォルトの名無しさん
20/01/31 13:07:50 AatGgooz.net
アドレスとポインタってのは
ageとage_tの関係
1007:デフォルトの名無しさん
20/01/31 13:13:53 GGrzMUVS.net
じゃあint *p = &a;の&もアドレスを取る演算子じゃなくて
ポインタを取る演算子に名前変えてもらうようにお願いしたら?
1008:デフォルトの名無しさん
20/01/31 17:37:24 aVH6lH01.net
アドレスはデコーダに入力するビット列 (ハードウエアの概念)
ポインタはアドレスを扱うことを目的とするデータ型 (プログラム言語の概念)
IEEE754とdoubleのような関係だ
1009:デフォルトの名無しさん
20/01/31 17:44:13 MQmpFGUT.net
通常はポインタが数値であることなんてのは意識せんわな。
リングバッファなんかを取り扱うなら嫌でも意識することになるが。
1010:デフォルトの名無しさん
20/01/31 18:16:27.29 HzrC4w9c.net
ポインタが数値がどうか意識しないと
リングバッファも作れないようなのが
C++を使うのか
1011:デフォルトの名無しさん
20/01/31 18:34:36 Dscz4LHl.net
分岐無くす高速化でもしているんじゃね
1012:デフォルトの名無しさん
20/01/31 18:37:20 CZDp2h8t.net
>>976
その例は逆
アドレスとポインタは本質(イデア)とその表現の関係にある
(イデア <-> 表現)
年齢 <-> 整数
色 <-> RGB値
アドレス <-> ポインタ
この関係に照らせば、年齢を取得する場合は
int get_age();
だし、色を取得する場合は
RGB get_color();
だし、アドレスを取得する場合は
T* get_address();
になる
1013:デフォルトの名無しさん
20/01/31 18:53:37 Nt0XFA2s.net
その哲学続けるの
1014:デフォルトの名無しさん
20/01/31 19:10:20 xOuBGXY8.net
>>986
分岐?
それも普通は不要
アドレスを意識するのはDMAなど
ハードウェアでリングバッファを使う時くらい
1015:デフォルトの名無しさん
20/01/31 19:13:50 MjAWY572.net
ハードウェアとのDMAならポインタにいれるアドレス自体は気にしないだろ
特定の物理メモリを適当な仮想アドレスにマップして使うのだし
1016:デフォルトの名無しさん
20/01/31 19:35:40 xOuBGXY8.net
DMAが扱うのは物理アドレス
1017:デフォルトの名無しさん
20/01/31 19:42:13 xOuBGXY8.net
じゃないのもあったりするのか?
チープなマイコンのDMAしか直接扱ったことがなくて
1018:デフォルトの名無しさん
20/01/31 19:51:22 aVH6lH01.net
仮想アドレスってことはページフォールトがあるってことだろ
OSによってページインされるまで待つことになるが
そこまでペリフェラルで面倒見る必要あるか考えてみそ
1019:◆QZaw55cn4c
20/01/31 19:51:32 tTpxWp9S.net
>>933
どれくらいブラックでしょうか?
スレリンク(tech板:21番)
URLリンク(ideone.com)
1020:デフォルトの名無しさん
20/01/31 19:53:30.58 aVH6lH01.net
未練
1021:デフォルトの名無しさん
20/01/31 19:54:58.34 xOuBGXY8.net
>>993
フォルトならエラーで止めときゃいいんでない?
そこまでハードで面倒見る必要は無い
1022:デフォルトの名無しさん
20/01/31 19:55:32.42 yrj+fbAX.net
最近はIOMMUが一般的
1023:デフォルトの名無しさん
20/01/31 20:02:09.40 yrj+fbAX.net
>>993
おいおいそんなわけないだろ
デバイスがさわるメモリはページアウトしない
でも物理アドレスを使わない理由は何でしょう?
あスレ違いだな
1024:デフォルトの名無しさん
20/01/31 20:34:35 aVH6lH01.net
>>996
ペリフェラルって何だと思う?
>>998
循環論法だな
1025:デフォルトの名無しさん
20/01/31 20:54:47.19 Nt0XFA2s.net
C++相談室 part148
スレリンク(tech板)
1026:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 44日 2時間 57分 54秒
1027:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています