トップページ⇒tech
1002コメント346KB

C++相談室 part124 [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 7fc9-G+K4)2016/04/03(日) 00:22:24.07ID:ZT/2NYWz0
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part123
http://echo.2ch.net/test/read.cgi/tech/1456040187/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】
http://peace.2ch.net/test/read.cgi/tech/1439849418/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0002デフォルトの名無しさん (ワッチョイ 7fc9-G+K4)2016/04/03(日) 00:23:36.87ID:ZT/2NYWz0
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
0003デフォルトの名無しさん (ワッチョイ 7fc9-G+K4)2016/04/03(日) 00:24:40.13ID:ZT/2NYWz0
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0004デフォルトの名無しさん (ワッチョイ 7fc9-G+K4)2016/04/03(日) 00:25:56.22ID:ZT/2NYWz0
---- テンプレ ここまで ----
0005デフォルトの名無しさん (ワッチョイ b742-G+K4)2016/04/04(月) 01:31:35.53ID:QWzclXen0
乙。
これは>>1乙じゃなくて\0終端を表すzeroの頭文字なんだからね!
0006デフォルトの名無しさん (ガックシ 0+af-e5NB)2016/04/04(月) 16:33:22.23ID:vx7kDnRQ+
template <class T, class U>
auto operator * (const matrix<T>& A, const matrix<U>& B)
-> matrix<decltype( std::declval<T>() * std::declval<U>() )>

ってTがcomplex<float>, Uがcomplex<U>のときにうまくいかないみたい

ttp://stackoverflow.com/questions/16865376/idiomatic-c11-type-promotion
に書いてあることと同じ現象が発生するわ
0007デフォルトの名無しさん (ワッチョイ b7a8-ppXo)2016/04/04(月) 17:51:25.41ID:K+tP/W6A0
Uがcomplex<U>
これは無理だろ
0008デフォルトの名無しさん (オッペケ Sref-G+K4)2016/04/04(月) 19:03:53.18ID:C11O14/Yr
> decltype( std::declval<T>() * std::declval<U>() )>

代わりにstd::common_type_t<T, U>にしたらいかんの?
0009デフォルトの名無しさん (ワッチョイ b77b-Kvzb)2016/04/04(月) 19:30:33.08ID:ogDZeBJL0
>>6
何をやりたいのか勘違いしてるかも知れないけど「Uがcomplex<U>」は書き間違いだとして、
そもそも
complex<double> z1;
complex<float> z2;
z1*z2;
とかは標準のままじゃ出来ないだろ。演算子定義してる?
リンク先の現象とは別のものだと思うけど?
0010デフォルトの名無しさん (jp 0Haf-e5NB)2016/04/04(月) 20:11:57.58ID:jBujPHQXH
>>7 >>9
ごめん。complex<U>→complex<double> だった。

template <class T, class U>
std::complex< decltype(std::declval<T>()*std::declval<U>() )>
operator * (const std::complex<T>& z1, const std::complex<U>& z2)
{
return std::complex< decltype(std::declval<T>()*std::declval<U>() )>
(z1.real()*z2.real()-z1.imag()*z2.imag(),
z1.real()*z2.imag()+z1.imag()*z2.real() );
}
は準備してるけど、これがなくてもコンパイル通る。ところが
template <class T> std::complex<T> operator * (int d, const std::complex<T>& z)
{
return std::complex<T>(d*real(z), d*imag(z));
}
がないと、
エラー C2893 関数テンプレート 'matrix<unknown-type> operator *(const U &,const matrix<T> &)' の特定に失敗しました
エラー C2784 'matrix<unknown-type> operator *(const matrix<T> &,const matrix<U> &)':
テンプレート 引数を'const matrix<T> &' に対して 'const std::complex<float>' から減少できませんでした
・・・みたいなのがわんさか出る.
0011デフォルトの名無しさん (jp 0Haf-e5NB)2016/04/04(月) 20:15:55.07ID:jBujPHQXH
matrix<float> af(3,3);
matrix<complex<double>> b(3,3);

af*bの演算やると、VC++2015では
警告 C4244 '引数': 'double' から 'int' への変換です。データが失われる可能性があります。 mat_test3 c:\users\ayabe\desktop\mat_test3\mat_test3\matrix_.h 203

がでる.gcc(TDM gcc 5.1.0)では警告すらでずにdoubleからintへの型キャストが起こる。
0012デフォルトの名無しさん (jp 0Haf-e5NB)2016/04/04(月) 20:31:24.66ID:jBujPHQXH
template <class T> std::complex<T> operator * (int d, const std::complex<T>& z)
{
return std::complex<T>(d*real(z), d*imag(z));
}
↓訂正
template <class T> std::complex<T> operator * (const std::complex<T>& z, int d)
{
return std::complex<T>(d*real(z), d*imag(z));
}

まあ,decltypeはもう使わないからいいか。お騒がせしました。
0013デフォルトの名無しさん (ワッチョイ b77b-Kvzb)2016/04/04(月) 20:36:09.73ID:ogDZeBJL0
>std::complex< decltype(std::declval<T>()*std::declval<U>() )>
これがもうダメだろ。例えばTがcomplex<double>、Uがcomplex<float>なら*の結果の型が定義されていないんだから
VS2015の警告はこれに関しては全く正しいよ
0014デフォルトの名無しさん (jp 0Haf-e5NB)2016/04/04(月) 20:41:55.46ID:jBujPHQXH
しかし、何でintなんですか?(デフォルト?)

それと結果の型をどうやって定義するんですか?

MPLかなんか知らんけど、そんなことするくらいならBlitz++を開発した
人のプリプロセッサ命令使うわ
0015デフォルトの名無しさん (ワッチョイ b77b-Kvzb)2016/04/04(月) 21:04:57.93ID:ogDZeBJL0
>しかし、何でintなんですか?(デフォルト?)
あなたがそうさせたから

だから標準ではcomplex<double>*complex<float>とか
complex<double>*floatとか、complex<double>*intとかは定義されていないの
そこにあなたがcomplex<T>*intを定義したもんだから
complex<double>*floatがcomplex<double>*intに変換されたてしまったというだけ
型変換ルールは難しいよね
このままC++でプログラミングを続けると躓きまくるパターンだな
0016デフォルトの名無しさん (jp 0Haf-e5NB)2016/04/04(月) 21:16:48.03ID:jBujPHQXH
それだけか? 何にも知らないくせに

あんたみたいな奴に上から目線で言われたくない。馬鹿
0017デフォルトの名無しさん (ワッチョイ b77b-Kvzb)2016/04/04(月) 21:18:22.81ID:ogDZeBJL0
あーあクソバカの相手して時間の無駄した
0018デフォルトの名無しさん (ワッチョイ 9fa6-eoZT)2016/04/04(月) 21:36:28.38ID:aM9lztCf0
通りすがりのアホな自分にも>>15の説明はよくわかる
0019デフォルトの名無しさん (ワッチョイ 6fcc-G+K4)2016/04/05(火) 14:56:46.43ID:FzTJXf040
時空のおっさんは虚数空間に居るらしいな
0020デフォルトの名無しさん (ワッチョイ 7c16-QzB1)2016/04/07(木) 09:40:32.57ID:sYQgs7of0
てす
0021デフォルトの名無しさん (スプー Sdb8-xmDs)2016/04/07(木) 11:23:16.83ID:AC5hJBPJd
大学でプログラミング始めようと思うので機材に関して質問

状況:授業の必修でJavaがあるからなんなら同時進行でC++もやろうと思う
    家に母艦となりうる富士通Esprimoという一体型PCあり
    家との距離や買い物サークルの関係で図書館利用が多いのでノートパソコンでの学習を希望

質問一 どのレベルのノーパソコンだとストレスフリーか?
      できれば住民の使ってるものも教えてもらいたい
質問二 また他の機材はいるか?
質問三 参考書としてどうしても必要なものと入門書について
0022デフォルトの名無しさん (スプー Sdc8-Ixw5)2016/04/07(木) 11:28:08.01ID:geZU7+Zhd
VisualStudioスレってないの?
0023デフォルトの名無しさん (ワントンキン MM40-xmDs)2016/04/07(木) 12:36:54.37ID:XWAdlud5M
>>21
回答一 最低でも100万円クラスのものが必要となる
回答二 専用キーボードとデバッグ用ディスプレイというものが必須である
    また、オプションではあるがコード解析用RAMがあったほうがよい
回答三 C++のJIS規格書が必要である
    参考書はThe Art of Computer programming、Structure and Interpretation of Computer Programs、Numerical Recipesなどを読むことが望ましい
0024デフォルトの名無しさん (スプー Sdc8-Ixw5)2016/04/07(木) 12:47:48.05ID:geZU7+Zhd
JIS規格書
0025デフォルトの名無しさん (ガラプー KK8d-nXV3)2016/04/07(木) 13:50:27.18ID:D9AesW8PK
1.今使ってるノーパソがdynabookのi5、4GM、HDD(Amazonで7万くらい)。
完全にストレスフリーではない(eclipse使用時や、VSのインテリセンスの動作速度)が、許容範囲。
SSDモデルであればストレスフリーかと思う。

2.あると便利なのはWindows 7以下のOSと、Linux。
Windowsの方はデバイスロスト対策(8以上は発生しない)の勉強、
Linuxはオーバーランとかのセキュリティの勉強。
(Windowsは例外投げられて止まる。コンパイラオプション無効にしても書き換え後が以前と変わってると無意味だった)

3.ドラフト(規格の草案)がgithubにあって無料。
『プログラミング言語C++第4版』、『C++のためのAPIデザイン』、『effective modern C++』、『C++テンプレートテクニック 第2版』
第4版は必須。

あと>>23死んでくれ
0026デフォルトの名無しさん (JP 0H8d-90FX)2016/04/07(木) 14:37:39.73ID:/RqFI3WhH
でも JavaとC++を並行でやるのはダメ、ゼッタイ
表面上似ているからかえって混同してどっちも使いものにならないよ
0027デフォルトの名無しさん (ワッチョイ 7c7b-N9sV)2016/04/07(木) 14:43:04.17ID:qpo8uFCK0
職業プログラマになるつもりなら早いうちから複数言語を並列でやることに慣れていたほうが良いと思うけど。
どちかに固まってしまうほうがまずい。
0028デフォルトの名無しさん (ワッチョイ 7c16-QzB1)2016/04/07(木) 14:51:19.83ID:sYQgs7of0
>>21

1.
CPUはCore-i5程度でおつりがくる。ATOMでもclangやgccは使える。
RAMは2Gあれば充分。
HDDは250GBあれば充分。
モニタの解像度は予算が許す限りの最大。狭い画面では思考まで狭くつぶされてしまう。
OSはWindowsでよいが、Linuxならモアベター。

2.
プリンタ。
実にくだらんことだが、プログラムはただ紙に印刷してみるだけで、モニタでは気付けなかったことがわかるからだ。(そして、そのあと決まって紙を無駄遣いしたと思う)
ついつい生活用を兼ねてインクジェットが欲しくなるかも知れんが、プログラム用にはモノクロレーザーがよい。プログラム自体に色はついていないし、レーザーは乾燥させなくてよく、トナーがインクより日持ちする。

3.
・必要
プログラム言語C++第4版 ISBN-13: 978-4797375954
ISO/IEC 14882:2014

・入門書
ストラウストラップのプログラミング入門 ISBN-13: 978-4798119595
0029デフォルトの名無しさん (ワッチョイ 7c7b-N9sV)2016/04/07(木) 15:00:08.34ID:qpo8uFCK0
プリンタ依存も避けたほうが良いと思うけどね。紙だと横幅の問題もあるし。
それに俺が使ってるエディタ上では色ついてるし。
0030デフォルトの名無しさん (スプー Sdb8-xmDs)2016/04/07(木) 15:09:43.34ID:QhAHKtTed
参考になりました
ありがとうございます
0031デフォルトの名無しさん (ワッチョイ 9dcb-sG86)2016/04/07(木) 17:11:02.42ID:8Ibgsdhs0
gcc6でconceptが使えるようになってんね
0032デフォルトの名無しさん (JP 0H8d-90FX)2016/04/07(木) 20:52:38.47ID:/RqFI3WhH
>>27
夢見すぎ
独学でどっちか片方それなりにでも身についてれば御の字
0033デフォルトの名無しさん (ワッチョイ 7c16-QzB1)2016/04/07(木) 21:12:54.17ID:sYQgs7of0
俺なんかBASICとマシン語を並列で憶えたぞ
マシン語もZ80と6800を並列で(当時の俺にとって2つの別言語)
N-BASICとF-BASICと大型のBASICも脳の別領域を使ってたし
0034はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 95a8-j/+h)2016/04/07(木) 21:20:11.88ID:DadLuQug0
>>23
JIS の C++ は C++03 だぞ。
0035デフォルトの名無しさん (ワッチョイ 7c16-QzB1)2016/04/07(木) 21:36:31.97ID:sYQgs7of0
志村〜後ろ後ろ、かw
0036デフォルトの名無しさん (ブーイモ MM8d-xmDs)2016/04/07(木) 23:00:34.69ID:KjNJiL53M
>>28
うちのプロジェクト500万ステップオーバーなんだけど、どうか印刷しないでくれよな。
0037デフォルトの名無しさん (ワッチョイ 7c16-QzB1)2016/04/07(木) 23:11:01.88ID:sYQgs7of0
SYSABENDみたいなことはそうそうしないから安心してくれ
0038デフォルトの名無しさん (ワッチョイ 74d4-+kqq)2016/04/07(木) 23:28:30.78ID:EsZr6lr20
32bitOSで使用してたアプリを64bitOSに移して、
time_tで日付表示しようとすると全然違う日付になるんだけど、
long型の宣言を何に変えればいいんでしょうか
0039デフォルトの名無しさん (ワンミングク MM40-m9JC)2016/04/07(木) 23:32:49.64ID:s1RKY7ZgM
>>38
time_t型
0040デフォルトの名無しさん (オッペケ Sr29-xmDs)2016/04/07(木) 23:54:11.99ID:OOVH0iNWr
変えなくてはいけないコードがそもそもおかしくね?
0041デフォルトの名無しさん (ワッチョイ 3d7b-m9JC)2016/04/08(金) 00:13:14.18ID:tJM0u/og0
>>40
何を当たり前の事を仰ってるのでしょうか
0042デフォルトの名無しさん (ワッチョイ 7f7b-DytT)2016/04/08(金) 13:25:37.92ID:nRvqcDPq0
char, wchar_t, short, int, long, lomg long, intptr_t, ptrdiff_t, size_t, off_t, time_t
符合有無
を正しく使い分けなきゃならない
0043デフォルトの名無しさん (オッペケ Sr29-xmDs)2016/04/08(金) 19:57:04.15ID:BVnlFcaMr
off_tは知らないけど
それは全部区別ついてないとだめだろ
0044デフォルトの名無しさん (ワッチョイ f68b-vY2k)2016/04/08(金) 22:08:41.94ID:WlvNU3n40
size_tは符号無し、ptrdiff_t、int、long、long longは符号付き、ということが確定じゃなかったっけ
違ったっけ

charが符号付か否かは処理系依存
ただし表示可能文字(isprint()が非0を返す文字)は正であることはC言語の規格で決まっている、
0045デフォルトの名無しさん (ワッチョイ fac9-xmDs)2016/04/09(土) 00:37:51.56ID:0tLp+Ivi0
ここはC++スレだがそんな決まりは初耳だ
0046デフォルトの名無しさん (ワッチョイ bbce-xmDs)2016/04/09(土) 18:54:14.11ID:ALj0g4vo0
ssize_t が無いのが微妙に不便。
0047デフォルトの名無しさん (オッペケ Sr29-xmDs)2016/04/10(日) 10:27:04.69ID:y7qpDauWr
むしろsize_tは符号付きにするべきだった
0048デフォルトの名無しさん (ワッチョイ 9d53-QzB1)2016/04/10(日) 23:05:48.42ID:DxYgjy+n0
なんで?
ptrdiff_tの話を間違った?
0049デフォルトの名無しさん (ワッチョイ fac9-xmDs)2016/04/10(日) 23:40:34.03ID:XJxT0yj80
intとの比較でいちいち警告出されたらたまらん
0050デフォルトの名無しさん (ブーイモ MM8d-xmDs)2016/04/11(月) 12:18:23.22ID:0MIRpDyTM
そもそもサイズは一般的にはマイナスの概念も含むものじゃないかと思う。
0051デフォルトの名無しさん (スプー Sdb8-xmDs)2016/04/11(月) 12:21:40.37ID:I1gJlU3cd
unsignedが出現するとイライラする
0052デフォルトの名無しさん (ワッチョイ 7c36-QzB1)2016/04/11(月) 16:45:35.21ID:uv6GH2mg0
>>49
それはコンパイラの問題であって、規格に文句を言うのはお門違いってやつだ
規格合致プログラムなのに難癖つける余計なお節介が邪魔なら、
それをやめさせる方法を探すか、窓から投げ捨てるかは、おまえ自身の問題だし
0053デフォルトの名無しさん (ワッチョイ 7f7b-DytT)2016/04/11(月) 18:25:06.27ID:cJbV017h0
>>52
お前バカだろう。>>42を正しく使い分けるためにコンパイラにチェックさせるんだよ。
0054デフォルトの名無しさん (ガラプー KKbf-nXV3)2016/04/11(月) 19:31:17.66ID:RH3X14PwK
「サイズがマイナスの概念を持つもの」はさすがに。
詳しくは知らないけど測度論?でもやってんのかと言いたい。
バナッハ・タルスキのあれな。
現実には存在しえないだろ負値。
0055デフォルトの名無しさん (ワッチョイ 88cb-j/+h)2016/04/11(月) 20:14:37.61ID:F0n0MoRl0
存在し得ない値を表すのにマイナスが欲しい
0056デフォルトの名無しさん (アウアウ Sac1-L6fk)2016/04/11(月) 20:26:21.31ID:Whc/9IOHa
HaskellのMaybeみたいなデータ構造があればいい
あとは効率次第
0057デフォルトの名無しさん (スプー Sdb8-xmDs)2016/04/11(月) 20:46:28.59ID:liIxp6L/d
>>54
バナタルは測度が定義できない部分集合に分解
0058デフォルトの名無しさん (ワッチョイ fe98-QzB1)2016/04/11(月) 22:15:52.94ID:DS0BshJK0
>>53
正しく使い分けるを定義しろ
いちいち明示的にキャストすることか
それとも変換も昇格も一切使わないことか
0059デフォルトの名無しさん (ワントンキン MM40-xmDs)2016/04/11(月) 22:20:20.19ID:t8dajl0XM
struct ssize_t { bool _sign; std::size_t _val};
0060デフォルトの名無しさん (オッペケ Sr29-SddS)2016/04/11(月) 22:41:24.20ID:+GeXodTxr
>>52
コンパイラーは意図があって警告を出してるのであって
その意図に照らし合わせて規格がこうあるべきだったと言っているのに、
規格通りなら文句言うなとか、アスペなの?
0061デフォルトの名無しさん (アウアウ Sac1-L6fk)2016/04/11(月) 23:05:12.91ID:Whc/9IOHa
『アスペルガー障害なの?』っていう侮蔑用語、そろそろ卒業しような。
0062デフォルトの名無しさん (ワッチョイ e042-j/+h)2016/04/11(月) 23:07:04.91ID:4BrCfwua0
覚えたばかりで使いたい年頃
0063デフォルトの名無しさん (ワッチョイ a030-j/+h)2016/04/11(月) 23:19:25.81ID:x/V8tc7c0
>>61
アスペ全然関係ねぇだろって状況でしか
使われるの見たことないなそういやw
0064デフォルトの名無しさん (ワッチョイ 413c-SddS)2016/04/12(火) 00:26:59.20ID:0UTgzyp30
>>63
アスペ
0065デフォルトの名無しさん (ワッチョイ 7f7b-DytT)2016/04/12(火) 01:17:31.61ID:sQLQIwRw0
>>58
定義してもらわなきゃわからない素人は引っ込んでようね
0066デフォルトの名無しさん (ドコグロ MM1c-SddS)2016/04/12(火) 08:30:13.78ID:xYAotuK9M
>>55
C脳の老害はそろそろ引退しろよ
0067デフォルトの名無しさん (ワッチョイ 9da8-QzB1)2016/04/12(火) 08:42:37.79ID:xvAFE9Om0
>>65
定義できないんだろ?
自分の主張をきちんと整理できないのは
素人以前に論客としての基本ができてないんだよ
恥を知ろうね
0068デフォルトの名無しさん (オッペケ Sr29-SddS)2016/04/12(火) 18:30:33.78ID:Pt+c78dMr
最終的なサイズは0以上でも、サイズを計算する過程で
intを使った演算をしたいことはある。
キャストしなきゃいけないのは流石に不便
0069デフォルトの名無しさん (ガラプー KKbf-nXV3)2016/04/12(火) 20:26:27.00ID:EvPGf+vtK
シフト演算や未定義動作の関係で、unsignedにすることはあるけど逆はないなぁ
具体的にどんな操作ですか?
0070デフォルトの名無しさん (ワッチョイ 7f7b-DytT)2016/04/13(水) 00:00:27.02ID:z3tTaqtH0
>>67
そんなに教えて欲しいのか?
添削してやるから定義してみな。
0071デフォルトの名無しさん (ワッチョイ 9da8-QzB1)2016/04/13(水) 00:28:53.46ID:CqRnSqIY0
>>70
定義するのはおまえだよ
小学生以下のすり替えしてんじゃねえ

つーか誰が何を主張してるのか整理できない
掛け値なし小学生以下の論客くずれじゃしゃーねーかw
0072デフォルトの名無しさん (ワッチョイ d37b-pOi2)2016/04/14(木) 03:08:20.77ID:PjjDqAVF0
>>71
教えをこう時は「お願いいたします」と頭を下げるのが、小学生でも知ってる常識だ
バカめ
0073デフォルトの名無しさん (アウアウ Sa67-rJyw)2016/04/14(木) 03:47:34.18ID:/Il1GiFba
パンパカパ〜ン
0074デフォルトの名無しさん (ワッチョイ 7bb4-w4ft)2016/04/14(木) 13:08:33.42ID:bhJKkgbs0
もし一週間後にこの世から C++ が消滅するとして、
お前らはどの言語にいくの?
D? Rust?
0075デフォルトの名無しさん (ワッチョイ db38-TaqW)2016/04/14(木) 13:11:50.21ID:rJmmubWG0
>>74
JavaScriptに逃げます
0076デフォルトの名無しさん (ワッチョイ 27a8-q6hj)2016/04/14(木) 13:18:07.01ID:/lkdV6bx0
>>72
おまえに教えを請うバカは全宇宙に1人もいねーよど低脳

おまえの主張が俺に伝わらなくて困るのはおまえだろ
俺にとって顔も知らん池沼のあうあうあーが意味わかんなくても当たり前だし
0077デフォルトの名無しさん (ブーイモ MM2f-Gtsw)2016/04/14(木) 13:30:04.13ID:RrIZ4ynPM
関数にexternを付ける意味って何ですか?
普通、外部リンケージの関数を使うときはプロトタイプ宣言をすればすむ話ですよね
0078デフォルトの名無しさん (ブーイモ MM2f-Gtsw)2016/04/14(木) 13:38:38.96ID:EGbMBKF8M
extern cを付けるなら意味あるよ
0079デフォルトの名無しさん (ワッチョイ 7bb4-w4ft)2016/04/14(木) 14:18:48.75ID:OJhwzOCe0
俗語として、"A" は接吻、"B"はペッティング、"C" は性器同士の接触を伴う性行為、すなわちセックスである
一方で C++ において extern 修飾子はそれを外部に公開することを示す

したがって extern "C" とは
0080デフォルトの名無しさん (スプー Sd2f-Gtsw)2016/04/14(木) 14:48:57.71ID:r/b7CawPd
エクスタシー
0081デフォルトの名無しさん (ブーイモ MM2f-Gtsw)2016/04/14(木) 15:46:36.79ID:RrIZ4ynPM
>>78
それはそうですが、externだけの場合の話です

>>79
感心しました。C#もお願いします
0082デフォルトの名無しさん (ワッチョイ 6fcc-Gtsw)2016/04/14(木) 16:05:37.53ID:Bx+gDZ8M0
extern+関数は関数内部で未定義の外部参照関数を一時的に宣言したりする場合に使う
0083デフォルトの名無しさん (ワッチョイ 6ba8-Jz3o)2016/04/14(木) 16:21:43.87ID:LtT4shjO0
>>74
Rust で C++ コンパイラの開発を試みます。
0084デフォルトの名無しさん (ブーイモ MM2f-Gtsw)2016/04/14(木) 16:51:00.65ID:RrIZ4ynPM
>>82
プロトタイプ宣言との違いが分かりません
すみませんが例を示していただけないでしょうか?
0085デフォルトの名無しさん (ワッチョイ 6fcc-Gtsw)2016/04/14(木) 17:34:52.06ID:Bx+gDZ8M0
関数内部でプロトタイプと同じ書き方してみろよ
extern記述しないとできないから
0086デフォルトの名無しさん (スプー Sdaf-VZXL)2016/04/14(木) 17:41:13.29ID:tV4LbGhWd
デキタァ…
0087デフォルトの名無しさん (ワッチョイ 4bdc-WXps)2016/04/14(木) 17:51:08.75ID:Y6Qtie590
C++では外部関数を宣言する時のexternは省略可能じゃなかったっけ?
付けても害はないし、つけなくても意味は同じ。

古いCとの互換性とかで残ってるんだと思ったが、
Cにおいても「externなしだと曖昧になる場面」てのが思い浮かばない。


g++ では関数内での外部関数宣言もexternなしで通ったよ。
0088デフォルトの名無しさん (ワッチョイ 6fcc-Gtsw)2016/04/14(木) 17:55:10.24ID:Bx+gDZ8M0
ま、今は色々仕様が確定してきてそこら辺ユルユルになってきているけどな
0089デフォルトの名無しさん (ワッチョイ 6fcc-Gtsw)2016/04/14(木) 17:56:53.73ID:Bx+gDZ8M0
昔は関数の内部に構造体書いたり関数の宣言とか出来なかったんだぜ
0090デフォルトの名無しさん (ワッチョイ 4bdc-WXps)2016/04/14(木) 20:24:15.71ID:Y6Qtie590
そういえば下のような感じで、外部関数のプロトタイプ宣言と
引数型の簡単な変換のインライン定義とを並べて書くときに…

namespace SomeSpace {
 extern bool some_condition_check(const char* str);
 inline bool some_condition_check(const std::string& str) {return str.c_str();}

 bool another_condition_check(const char* str);
 inline bool another_condition_check(const std::string& str) {return str.c_str();}
}

externを書いておくと関数名がきれいに縦に並んでちょっと見やすくなる
という効用があるね。"extern" と "inline" の字数が同じだから。
0091デフォルトの名無しさん (ワッチョイ 5f13-mNwz)2016/04/14(木) 20:43:24.46ID:f1hhftJp0
>>89
へえ‥今は関数の内部に構造体の定義が書けるんだ‥新鮮だね
0092デフォルトの名無しさん (JP 0H07-DByn)2016/04/14(木) 21:23:16.59ID:BY7gxQ6DH
関数内関数は return 有無の見間違えとか面倒くさいから嫌い
0093デフォルトの名無しさん (ワッチョイ a742-VZXL)2016/04/14(木) 21:30:57.47ID:4DxPT4rq0
>>92
lambdaもだめか
0094デフォルトの名無しさん (オッペケ Sr27-Gtsw)2016/04/14(木) 21:43:18.93ID:sprOrblAr
>>85〜>>86の流れにワロタ
0095デフォルトの名無しさん (ワッチョイ 27a8-q6hj)2016/04/14(木) 22:38:49.39ID:/lkdV6bx0
staticな関数原型と衝突したことを検出するために
自分の関数原型と関数定義をexternにするとか?
今となってはD組の話、とタカをくくると思わぬところで足をすくわれる

# 死刑執行がおせーんだよ >WG21
0096デフォルトの名無しさん (ワンミングク MMef-8wQM)2016/04/15(金) 00:42:56.90ID:MuKGbCphM
asioはいつ標準に入るんだ
0097デフォルトの名無しさん (ワッチョイ b763-Gtsw)2016/04/15(金) 08:37:52.62ID:wcmNmqit0
static void f();
extern void f();

一体何を検知したいのか
0098デフォルトの名無しさん (ブーイモ MM2f-Gtsw)2016/04/15(金) 15:29:12.25ID:wsA6y7yQM
>>87
自分もそう理解してました

実はコードはC++でなくCなのですが、まぁそこは同じですよね
NASA、エアバス、ボーイングなどが参画してる某OSSなんですが、
あまり洗練されたコードじゃないので深く意味を考えないほうがいいかも
0099デフォルトの名無しさん (スプー Sdaf-VZXL)2016/04/15(金) 15:37:21.93ID:rmsnL02Wd
struct hoge{ std::string s; };
std::array< char, sizeof( hoge ) > buf;
hoge* a = new( buf.data() ) hoge;
a->s = "aaaaaaaaaaa";
std::array< char, sizeof( hoge ) > buf2;
buf2 = buf;
hoge* b = reinterpret_cast< hoge* >( buf2.data() );
b->s = "bbbbbbbbbb";
std::printf( "%s %s\n", a->s.c_str(), b->s.c_str() );
aとbはオブジェクトとして使っても大丈夫ですか
0100デフォルトの名無しさん (ワッチョイ 277b-GRux)2016/04/15(金) 15:53:10.39ID:CjDQhw6r0
ダメ
0101デフォルトの名無しさん (スプー Sdaf-VZXL)2016/04/15(金) 16:08:36.54ID:rmsnL02Wd
なにゆえですか
■ このスレッドは過去ログ倉庫に格納されています