タグ付けされた質問 「c++」

C ++は汎用プログラミング言語です。もともとCの拡張として設計され、構文は似ていますが、現在は完全に異なる言語になっています。このタグは、C ++コンパイラでコンパイルされる(される)コードに関する質問に使用します。特定の標準リビジョン[C ++ 11]、[C ++ 14]、[C ++ 17]または[C ++ 20]などに関連する質問には、バージョン固有のタグを使用します。

7
静的フィールドは継承されますか?
静的メンバーが継承される場合、それらは階層全体に対して静的ですか、それともそのクラスだけですか? class SomeClass { public: SomeClass(){total++;} static int total; }; class SomeDerivedClass: public SomeClass { public: SomeDerivedClass(){total++;} }; int main() { SomeClass A; SomeClass B; SomeDerivedClass C; return 0; } 3つのインスタンスすべてで合計は3になりますか、それとも2 SomeClassと1 SomeDerivedClassですか?
102 c++  inheritance  static 

2
値によるC ++ 0xラムダキャプチャは常にconst?
値でキャプチャし、キャプチャした値を非定数にする方法はありますか?ライブラリのファンクターがあり、const以外のメソッドをキャプチャして呼び出したいのですが、constにする必要があります。 以下はコンパイルされませんが、foo :: operator()constを作成すると修正されます。 struct foo { bool operator () ( const bool & a ) { return a; } }; int _tmain(int argc, _TCHAR* argv[]) { foo afoo; auto bar = [=] () -> bool { afoo(true); }; return 0; }
102 c++  lambda  const  c++11 

2
「バイト数」をゼロに設定してmemcpy()およびmemmove()を呼び出すことはできますか?
私はactully移動することは何もないとき/治療の例に必要でコピーしていますmemmove()/ memcpy()エッジケースなど int numberOfBytes = ... if( numberOfBytes != 0 ) { memmove( dest, source, numberOfBytes ); } または私はチェックせずに関数を呼び出す必要があります int numberOfBytes = ... memmove( dest, source, numberOfBytes ); 前のスニペットのチェックは必要ですか?
102 c++  c  pointers  memcpy  memmove 

4
null参照は可能ですか?
このコードは有効ですか(および定義された動作)? int &nullReference = *(int*)0; g ++および打ち鳴らす++使用する場合でも、警告なしにそれをコンパイルし、両方の-Wall、-Wextra、-std=c++98、-pedantic、-Weffc++... もちろん、参照にはアクセスできないため(nullポインターの逆参照を意味するため)、参照は実際にはnullではありませんが、アドレスをチェックすることで、nullかどうかを確認できます。 if( & nullReference == 0 ) // null reference

3
shared_ptr <Base>をshared_ptr <Derived>にダウンキャストしますか?
更新:この例のshared_ptrはBoostのものと似ていますが、それはshared_polymorphic_downcast(またはそのことについてはdynamic_pointer_castまたはstatic_pointer_cast)をサポートしていません! 参照カウントを失うことなく、派生クラスへの共有ポインターを初期化しようとしています: struct Base { }; struct Derived : public Base { }; shared_ptr&lt;Base&gt; base(new Base()); shared_ptr&lt;Derived&gt; derived; // error: invalid conversion from 'Base* const' to 'Derived*' derived = base; ここまでは順調ですね。C ++が暗黙的にBase *をDerived *に変換することを期待していませんでした。ただし、私はコードによって表現される機能が必要です(つまり、ベースポインターをダウンキャストしながら参照カウントを維持します)。私の最初の考えは、Baseにキャスト演算子を提供して、Derivedへの暗黙の変換が行われるようにすることでした(ペダントの場合:ダウンキャストが有効であることを確認しますので、心配しないでください)。 struct Base { operator Derived* (); } // ... Base::operator Derived* () { return down_cast&lt;Derived*&gt;(this); } …
102 c++  gcc  boost 

6
文字列c_str()とdata()
c_str()とdata()(STLと他の実装での)の違いは、c_str()常にnullで終了するが、そうdata()でない場合があることをいくつか読んだことがあります。私が実際の実装で見た限りでは、それらは同じことをするか、data()呼び出しますc_str()。 ここで何が欠けていますか?どのシナリオで使用する方が正しいですか?
102 c++  stl  c-str 

1
画像からASCIIアートへの変換
プロローグ この主題は時々ここでStack Overflowに表示されますが、通常は書き方が悪い質問であるため削除されます。私はそのような多くの質問を見て、追加の情報が要求されたときにOP(通常は低担当者)から沈黙しました。時々、入力が私にとって十分である場合、私は回答で応答することを決定し、通常はアクティブなときに1日あたり数回の賛成票を獲得しますが、数週間後に質問が削除/削除され、すべてが始まり。そこで、このQ&Aを書いて、答えを何度も書き換えることなく直接質問を参照できるようにすることにしました… もう1つの理由は、このメタスレッドが私をターゲットにしているためです。追加の入力を受け取った場合は、コメントしてください。 質問 C ++を使用してビットマップイメージをASCIIアートに変換するにはどうすればよいですか? いくつかの制約: グレースケール画像 等幅フォントの使用 シンプルに保つ(初心者レベルのプログラマーには高度なものを使用しない) これは関連するWikipediaページのASCIIアートです(@RogerRowlandに感謝します)。 ここでは、迷路とASCIIアートの変換に関する Q&Aが類似しています。

2
libc ++での短い文字列最適化のメカニズムは何ですか?
この回答は、短い文字列の最適化(SSO)の概要を示しています。ただし、実際に、特にlibc ++実装でどのように機能するかを詳しく知りたいのですが。 SSOの対象となるには、文字列はどのくらい短い必要がありますか?これはターゲットアーキテクチャに依存しますか? 文字列データにアクセスするとき、実装はどのように短い文字列と長い文字列を区別しますか?それは同じくらい簡単m_size &lt;= 16ですか、それとも他のメンバー変数の一部であるフラグですか?(私はそれm_sizeまたはその一部が文字列データを格納するために使用されることもあると思います) 私がこの質問をlibc ++に対して特別に尋ねたのは、それがSSOを使用していることがわかっているためです。これは、libc ++ホームページにも記載されています。 ソースを確認した後の観察結果を次に示します。 libc ++は、文字列クラスの2つのわずかに異なるメモリレイアウトでコンパイルできます_LIBCPP_ALTERNATE_STRING_LAYOUT。これはフラグによって制御されます。どちらのレイアウトでも、リトルエンディアンマシンとビッグエンディアンマシンが区別され、合計4つの異なるバリアントが存在します。以下の説明では、「通常の」レイアウトとリトルエンディアンを想定します。 さらにそれsize_typeが4バイトでvalue_type1バイトであると仮定すると、これは文字列の最初の4バイトがメモリ内でどのように見えるかです。 // short string: (s)ize and 3 bytes of char (d)ata sssssss0;dddddddd;dddddddd;dddddddd ^- is_long = 0 // long string: (c)apacity ccccccc1;cccccccc;cccccccc;cccccccc ^- is_long = 1 短い文字列のサイズは上位7ビットであるため、アクセスするときにシフトする必要があります。 size_type __get_short_size() const { return __r_.first().__s.__size_ &gt;&gt; 1; } 同様に、長い文字列の容量のゲッターとセッターは__long_mask、is_longビットを回避するために使用します。 私はまだ私の最初の質問に対する答えを探しています。つまり__min_cap、異なる文字列に対して、どのような値、短い文字列の容量がとるのでしょうか? その他の標準ライブラリの実装 …

4
CコードでのC ++ライブラリの使用
データを管理するためのさまざまなクラスを提供するC ++ライブラリがあります。ライブラリのソースコードがあります。 ライブラリをCコードとC ++コードで同時に使用できるように、C ++ APIを拡張してC関数呼び出しをサポートする必要があります。 私はGNUツールチェーン(gcc、glibcなど)を使用しているため、言語とアーキテクチャのサポートは問題になりません。 これが技術的に不可能である理由はありますか? 注意が必要な落とし穴はありますか? これに関して利用可能なリソース、コード例、ドキュメントはありますか? 私が見つけた他のいくつかのこと: 以下を使用して、Cコードで使用する必要があるC ++ヘッダーをラップします。 #ifdef __cplusplus extern "C" { #endif // // Code goes here ... // #ifdef __cplusplus } // extern "C" #endif 「実際の」C ++インターフェースは、Cには含まれていない個別のヘッダーファイルに保存します。ここではPIMPLの原則を考えます。#ifndef __cplusplus #errorものを使用すると、狂気を検出するのに役立ちます。 Cコードの名前としてのC ++識別子の注意 CおよびC ++コンパイラ間でサイズが異なる列挙型。GNUツールチェーンを使用している場合はおそらく問題ではありませんが、それでも注意してください。 Cが混乱しないように、構造体については次の形式に従ってください。 typedef struct X { ... } X 次に、C …
102 c++  c  gcc  glibc 


6
STLコンテナをフィルタリングする最新の方法は?
何年にもわたるC#の後でC ++に戻ると、配列をフィルタリングする最新の-読み取り:C ++ 11-方法はどうなるのか、つまり、このLinqクエリに似たものをどのように実現できるのか疑問に思いました。 var filteredElements = elements.Where(elm =&gt; elm.filterProperty == true); 要素のベクトルをフィルタリングするために(stringsこの質問のために)? 明示的なメソッドを定義boost::filter_iteratorする必要がある古いSTLスタイルのアルゴリズム(またはのような拡張機能)が今では置き換えられることを心から願っていますか?
102 c++  c++11  stl 

16
C ++を使用してナノ秒単位で時間を提供するタイマー関数
APIが値を返すのにかかった時間を計算したいと思います。このようなアクションにかかる時間は、ナノ秒単位です。APIはC ++クラス/関数なので、同じことを計算するためにtimer.hを使用しています。 #include &lt;ctime&gt; #include &lt;cstdio&gt; using namespace std; int main(int argc, char** argv) { clock_t start; double diff; start = clock(); diff = ( std::clock() - start ) / (double)CLOCKS_PER_SEC; cout&lt;&lt;"printf: "&lt;&lt; diff &lt;&lt;'\n'; return 0; } 上記のコードは秒単位で時間を与えます。どのようにしてナノ秒単位で、より正確に同じを得ますか?
101 c++  c  timer 

3
正規表現についてgcc 4.8以前のバグがありますか?
C ++ 11のコードでstd :: regexを使用しようとしていますが、サポートに少しバグがあるようです。例: #include &lt;regex&gt; #include &lt;iostream&gt; int main (int argc, const char * argv[]) { std::regex r("st|mt|tr"); std::cerr &lt;&lt; "st|mt|tr" &lt;&lt; " matches st? " &lt;&lt; std::regex_match("st", r) &lt;&lt; std::endl; std::cerr &lt;&lt; "st|mt|tr" &lt;&lt; " matches mt? " &lt;&lt; std::regex_match("mt", r) &lt;&lt; std::endl; std::cerr &lt;&lt; "st|mt|tr" &lt;&lt; …
101 c++  regex  gcc  c++11  libstdc++ 

3
単純な「Hello World」スタイルのプログラムがTurbo C ++でコンパイルされないのはなぜですか?
プログラミングクラスのC ++の学習を始めました。この「Hello World」プログラムをダウンロードしました: #include &lt;iostream&gt; using namespace std; int main() { cout &lt;&lt; "Hello, World!"; return 0; } しかしターボC ++は不平を言います: Error D:\HELLO.CPP 1: Unable to open include file 'IOSTREAM' Error D:\HELLO.CPP 2: Declaration syntax error Error D:\HELLO.CPP 6: Undefined symbol 'cout' この非常に単純なプログラムの何が問題になっていますか?これらのエラーを修正するにはどうすればよいですか?
101 c++  turbo-c++  c++-faq 

8
範囲ベースのforループで使用するC ++ 11の範囲クラスはありますか?
私は少し前にこれを書いていることに気づきました: template &lt;long int T_begin, long int T_end&gt; class range_class { public: class iterator { friend class range_class; public: long int operator *() const { return i_; } const iterator &amp;operator ++() { ++i_; return *this; } iterator operator ++(int) { iterator copy(*this); ++i_; return copy; } bool operator ==(const …
101 c++  c++11  std 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.