問題タブ [linkage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - VC ++ 2010のもう1つのバグ?ヘッダーで定数REFERENCEを宣言することについて
数行のコードは1000語の価値があります。
私は3つの単純なファイルを持っています:header.h、main.cpp、other.cpp
最も単純なプロジェクトをコンパイルするとき、VC++2010は次のように文句を言います。
次の2つの参照があるため、これはVC++2010のバグであると確信しています。
1、C ++標準によると:(n3126の140ページ)
「constと宣言され、externと明示的に宣言されていないオブジェクトには、内部リンクがあります。」
2、MSDNによると:(http://msdn.microsoft.com/en-us/library/357syhfh (VS.80).aspx )
「Cでは、定数値はデフォルトで外部リンケージに設定されるため、ソースファイルにのみ表示されます。C++では、定数値はデフォルトで内部リンケージに設定されるため、ヘッダーファイルに表示されます。
constキーワードは、ポインタ宣言でも使用できます。」
c++ - hファイルの静的キーワードと内部リンケージ
さらに別のstatic
質問。私は以下を読みました:
そして、私はまだ次の動作を理解できません:私は1つのh
ファイルを持っています:
そして2つのcpp
ファイル:
と:
プログラムの出力は次のとおりです。
これで、ファイルが2回含まれてA
いるため、コンストラクターが2回呼び出され、名前付きのインスタンスが宣言されているため、内部リンケージがあり、コンパイラーは満足しています。も静的に宣言されているため、内部リンケージもあり、その値は2つのファイルで共有されないことが予想されますが、プログラム出力は、2までカウントされるため、値が共有されることを意味します。h
A
a
static
counter
cpp
洞察はありますか?
h
編集: vs 。ファイルで静的変数を宣言するという文脈で「良いプログラミング習慣」と見なされるものに関する回答cpp
も歓迎します。
python - Python hclusterで疎行列を使用するには?
Pythonでhclusterライブラリを使用しようとしています。hcluster で疎行列を使用するのに十分な Python の知識がありません。誰か助けてください。だから、私がやっていること:
data.dmp には、次のような行列が含まれています。
行列の右上部分のみが含まれます。私はそれを英語で正しく綴る方法がわかりません:)したがって、すべての数字は主対角線よりも上にあるため、data.dmpには次が含まれます:1 0 1, 0 1 , 0
理由は不明ですが、hcluster は逆の値を使用します。たとえば、A!=C の場合は 0 を使用し、A == D の場合は 1 を使用します。
リンケージY
したがって、行列 Z が必要です (hcluster を正しく使用した場合は?)
しかし、次の問題があります。
大量の入力データに疎行列を使用したいのですが、今のように入力データを生成するのに時間がかかるため、別の言語から python にデータをインポートする必要があるため、テキスト ファイルを読み取る必要があります。親切に、pythonの第一人者はそれを作る方法を提案していますか?
python hcluster を使っていた人へ、膨大な量のデータ、数百行を処理する必要があるのですが、hcluster でできるのでしょうか? このアルゴリズムは本当に正しい HAC を生成しますか?
読んでくれてありがとう、助けてくれてありがとう!
c++ - C++ に含まれる C ヘッダーで enum を前方宣言する
列挙型を前方宣言する C ヘッダーがあります。どうやら、これは C++ では不可能なので、フォームのすべてのプリプロセッサ ラップは
助けにはなりません。C ヘッダーを編集せずにこれらのヘッダーを C++ 翻訳単位に含める方法はありますか? 幸いなことに、この場合、前方宣言を回避するために C ヘッダーを変更することは比較的簡単ですが、これはかなり重大な問題であると私は思います。一般に、C++ から C ライブラリにリンクすることはいつでも可能だと考えていましたが、ヘッダーをインクルードできないため、場合によってはそれが非現実的になっているようです。
c++ - ヘッダー ファイルの const 変数と静的初期化の大失敗
静的変数の初期化に関する多くの質問を読んだ後、これがconst
名前空間レベルの変数にどのように適用されるかはまだわかりません。
ビルド スクリプトによって生成されたヘッダーファイルに、次のようなコードがあります。config.h
私が読んだことによると、static
キーワードは不要であり、ここでは廃止されています。
私の質問:上記のコードは静的初期化の大失敗を起こしやすいですか?
ヘッダーファイルに次のものがある場合myclass.h
:
これにより、静的初期化で問題が発生しますか?
私が正しく理解していれば、const
内部リンケージを持つ変数のために、どちらの場合でも問題はないはずですか?
編集:(dribeasの回答により)
たぶん、次のようなユースケースに興味があることを言及する必要があります。
でmain.cpp
:
このユース ケースに関する別の質問: この場合、コンパイラは最適化をpath2
行いませんか?
c++ - テンプレートを外部の「C」ブロック内に含めることができないのはなぜですか?
これは、 「テンプレート内でextern-「C」関数型へのポインターをtypedefすることは可能ですか?」に対する回答のフォローアップ質問です。
g++
このコードは、Visual C / C ++、およびComeau C / C ++でコンパイルできず、基本的に同じエラーメッセージが表示されます。
g ++は「エラー:Cリンケージのあるテンプレート」と言い、Visual C / C ++はコンパイラエラーC2894を出し、Comeau C / C ++は「エラー:この宣言には外部の「C」リンケージがない可能性があります」と言います。
事は、すべてが満足しているということです:
C ++標準のセクション7.5、リンケージ仕様は次のように述べています。
クラスメンバーの名前およびクラスメンバー関数のメンバー関数タイプについては、AC言語リンケージは無視されます。
そしてそれは例さえ与えます:
テンプレートが外部「C」ブロックで許可されている場合、インスタンス化のメンバー関数はC++リンケージを持ちます。
では、なぜC++98標準状態の第14章テンプレートを実行するのでしょうか。
テンプレート名にはリンケージ(3.5)が含まれる場合があります。テンプレート、テンプレートの明示的な特殊化(14.7.3)、およびクラステンプレートの部分的な特殊化には、Cリンケージがあってはなりません。
テンプレートにリンクがあるとはどういう意味ですか?テンプレートリンケージとは何ですか?
クラスに問題がなく、テンプレートのインスタンス化のすべてのメンバー関数(デフォルトのコンストラクタ、デストラクタ、および代入演算子のオーバーロード)にC ++リンケージがあるのに、Cリンケージを持つテンプレートを使用することが明示的に禁止されているのはなぜですか?
c++ - リンケージを完了するために「intClassName::VariableName」が常に必要なのはなぜですか?
なぜ私はいつもその(!)行を書かなければならないのですか?
記述しないと、コンパイラーは内部リンケージを完了できないため、リンカーエラーが発生します(私は推測します)。なんで ?
c++ - インライン関数がデフォルトで内部リンケージになっていることをどのように証明できますか?
クラスのインライン関数がデフォルトで内部リンケージになっていることをどのように証明できますか?
言い換えると/:
内部リンケージの出力をコンソールに表示するにはどうすればよいですか?
編集:UNIXプラットフォーム
c - 静的関数への関数ポインタを渡すことは可能/安全/正気ですか?
関数ポインタをその関数に渡すことによって、ファイルの1つから関数を公開したいとします。その機能を次のように宣言しても安全static
ですか?関数はそのファイルに固有であると宣言されているので、コンパイラーは私の関数ポインターを無効にする、またはそのファイルのコンテキスト外でそれを無意味にする柔道を行うことを許可されていますか?
私のコードではありませんが、私が言っていることの(ばかげた)例:
そのコード(またはその構文的に正しい近似)を考えるとcool_function_ptr
、別のファイルからアクセスすることは違法でしょうか?
c++ - C++のextern列挙型
いくつかの.hファイルで宣言した列挙型があります:
別の.cppではこれを行うことはできません:
列挙型が宣言されているヘッダー全体を含めずに、どのようにこれを行うのでしょうか?