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

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

9
新しい標準バージョンのC ++でサイレント動作の変更があったことはありますか?
(リストではなく、要点を証明するための例を1つか2つ探しています。) C ++標準の変更(たとえば、98から11、11から14など)によって、既存の整形式の定義された動作のユーザーコードの動作がサイレントに変更されたことがありますか?つまり、新しい標準バージョンでコンパイルするときに警告やエラーはありませんか? ノート: 私は、実装者/コンパイラの作成者の選択ではなく、標準で義務付けられている動作について質問しています。 コードの工夫が少ないほど、(この質問への回答として)優れています。 のようなバージョン検出を備えたコードを意味するのではありません#if __cplusplus >= 201103L。 メモリモデルに関する回答は問題ありません。

3
C ++ 14はC ++に新しいキーワードを追加していますか?
C ++標準委員会は、新しいキーワードを言語に追加することをためらう傾向がありますが、C ++ 11ではそうではありませんでした。いくつかの例: constexpr decltype thread_local auto // New usage noexcept nullptr static_assert alignof alignas C ++ 14で導入された新しいキーワードはありますか?
103 c++  c++11  keyword  c++14 

13
数値が10の倍数であるか、特定の範囲のセット内であるかを判断する
プログラムに必要なループがいくつかあります。疑似コードを書き出すことはできますが、論理的にどのように書くかは完全にはわかりません。 私は欲しい - if (num is a multiple of 10) { do this } if (num is within 11-20, 31-40, 51-60, 71-80, 91-100) { do this } else { do this } //this part is for 1-10, 21-30, 41-50, 61-70, 81-90 これは、ヘビとはしごのボードゲーム用です。 モジュラスを使用する必要がある最初のifステートメントif (num == 100%10)が正しいと思いますか? 2番目はわかりません。私はそれを書き出すことができますが、それif (num > 10 …

4
shared_ptrはどこにありますか?
shared_ptrがどこにあるのかを数時間探した後、私は今とてもイライラしています。私が目にする例はどれも、ヘッダーを含むshared_ptr(そして機能する)完全なコードを示していません。単に述べるだけstdでtr1、<memory>まったく役に立たない!ブーストをダウンロードしましたが、それでも表示されません!誰かがそれを見つける場所を正確に教えてくれますか? 欲求不満を解消させてくれてありがとう! 編集:タイトルが変更されたようです。申し訳ありません。つまり... shared_ptrが「C ++バージョンに依存する」ことは私には明確ではなかったためでもありました->私が環境について述べなかった理由->したがって、おそらく私がそれを見つけることが非常に困難であった理由。 MSVS2008に取り組んでいます。 編集2:理由はわかりませんが、[memory]と[boost / tr1 / memory.hpp]と[boost / tr1 / tr1 / memory]を含めて、どこからでもshared_ptrを探していました。もちろん、できませんでしたない すべての応答をありがとう。

2
エラー発生時にコンパイラーが「pi」記号を表示
Coliruでコードをテストしていたところ、奇妙な出力が得られました。私はコードを調べて、この簡単なコードでそれを再現することができました: int main() { π } g ++での出力: clang: たとえば、pi(アドレスなしで)だけを使用すると、期待される結果が表示されます。 main.cpp:3:5: error: 'pi' was not declared in this scope pi; ^ 自分のマシンでg ++ 4.9.2を使用して、他のサイトでこれを再現しようとしましたが、できませんでした。 これはこのサイトのバグですか、これらのコンパイラの設定ですか? そしてなぜアドレス演算子(&)だけを使用するとこの記号が表示されるのですか?
103 c++  coliru 

4
なぜみんな標準C型よりもtypedefなのですか?
あなたが使用したい場合はQtのを、あなたは包含する必要がありquint8、quint16等々と。 あなたが使用したい場合はGLibのを、あなたは歓迎していguint8、guint16など。 上のLinuxがあるu32、s16などと。 uC / OSはSINT32などUINT16を定義します。 そして、それらのいくつかの組み合わせを使用する必要がある場合は、トラブルに備えることをお勧めします。上なので、あなたのマシンがu32されるtypedef以上日間longとquint32されるtypedef以上日間intとコンパイラが文句を言うでしょう。 なぜ誰もがこれをしているのです<stdint.h>か?図書館にとってこれはある種の伝統なのでしょうか?
103 c++  c  stdint 

5
C ++での一時的な寿命を保証しますか?
C ++は、関数呼び出し内で作成され、パラメーターとして使用されない一時変数の存続期間を保証しますか?次にクラスの例を示します。 class StringBuffer { public: StringBuffer(std::string & str) : m_str(str) { m_buffer.push_back(0); } ~StringBuffer() { m_str = &m_buffer[0]; } char * Size(int maxlength) { m_buffer.resize(maxlength + 1, 0); return &m_buffer[0]; } private: std::string & m_str; std::vector<char> m_buffer; }; そして、これはあなたがそれをどのように使用するかです: // this is from a crusty old API that can't …
103 c++ 

6
__gxx_personality_v0の目的は何ですか?
これはOS開発サイトからの中古の質問ですが、どこにもまともな説明が見つからなかったので、興味津々でした。 gccを使用して独立したC ++プログラムをコンパイルおよびリンクすると、次のようなリンカーエラーが発生することがあります。 out/kernel.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' これは明らかに、このシンボルがlibstdc ++で定義されているためです。これは、独立した環境にはありません。問題を修正するには、このシンボルをどこかに定義する必要があります。 void *__gxx_personality_v0; どちらがいいですか、魔法のように機能するものが好きではありません...問題は、このシンボルの目的は何ですか?
103 c++  gcc  linker  kernel 

12
なぜC文字リテラルが文字ではなく整数なのですか?
、C ++でsizeof('a') == sizeof(char) == 1。これは'a'文字リテラルでありsizeof(char) == 1、標準で定義されているため、直感的に理解できます。 ただし、Cではsizeof('a') == sizeof(int)。つまり、C文字リテラルは実際には整数であるように見えます。なぜ誰か知っていますか?私はこのCの癖について多くの言及を見つけることができますが、なぜそれが存在するのかについての説明はありません。
103 c++  c  char  sizeof 

10
std :: setに「contains」メンバー関数がないのはなぜですか?
私は頻繁に使用してstd::set<int>おり、そのようなセットに数値が含まれているかどうかを確認する必要があるだけです。 私は書くのが自然だと思います: if (myset.contains(number)) ... しかし、containsメンバーがいないため、面倒なことを書く必要があります。 if (myset.find(number) != myset.end()) .. またはそれほど明白ではない: if (myset.count(element) > 0) .. この設計決定の理由はありますか?
103 c++  stl  stdset 

2
boost :: flat_mapと、mapおよびunordered_mapと比較した場合のパフォーマンス
キャッシュヒットにより、メモリの局所性によってパフォーマンスが大幅に向上することは、プログラミングの常識です。私は最近知りましたboost::flat_map、地図のベクターベースの実装がどれであるを。それはあなたの典型的なものほど人気が​​ないようですmap/ unordered_mapそれで私はパフォーマンスの比較を見つけることができませんでした。それはどのように比較され、そのための最良のユースケースは何ですか? ありがとう!
103 c++  boost  map 

7
C / C ++マクロのカンマ
このようなマクロがあるとしましょう #define FOO(type,name) type name どのように使用できますか FOO(int, int_var); しかし、必ずしもそれほど単純ではありません。 FOO(std::map<int, int>, map_var); // error: macro "FOO" passed 3 arguments, but takes just 2 もちろん、次のことができます。 typedef std::map<int, int> map_int_int_t; FOO(map_int_int_t, map_var); // OK 人間工学的ではありません。プラスタイプの非互換性に対処する必要があります。これをマクロで解決する方法はありますか?
103 c++  c  macros  c-preprocessor 

8
C ++整数の除算と剰余を取得する最良の方法
aをbで割って、結果cと剰余の両方に関心がある場合(たとえば、秒数があり、それを分と秒に分割したいとします)、どうすればよいですか?それについて行きますか? それはでしょうか int c = (int)a / b; int d = a % b; または int c = (int)a / b; int d = a - b * c; または double tmp = a / b; int c = (int)tmp; int d = (int)(0.5+(tmp-c)*b); または 多分一度に両方を与える魔法の機能はありますか?
103 c++  division 

2
SDLレンダラーとは何ですか?
私はSDL2から始めて、SDL_Rendererが何であるかを理解するのに苦労しています。 それは何ですか?それは何をするためのものか?SDL_Renderer、SDL_Window、SDL_Surface、SDL_Textureの違いとそれらの関係 この紹介コードを理解しようとすると、これに問題がありました: #include <iostream> #include <SDL2/SDL.h> int main() { /* Starting SDL */ if (SDL_Init(SDL_INIT_EVERYTHING) != 0) { std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl; return 1; } /* Create a Window */ SDL_Window *window = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN); if (window == nullptr) …
103 c++  sdl  terminology  sdl-2 

2
std :: move()はどのようにして値をRValuesに転送しますか?
の論理を完全に理解していないことに気づきましたstd::move()。 最初はグーグルで検索しましたが、使用方法についてのドキュメントしかstd::move()なく、構造がどのように機能しているかはわかりません。 つまり、私はテンプレートメンバー関数が何であるかを知っていますがstd::move()、VS2010で定義を調べると、それでも混乱します。 std :: move()の定義は以下になります。 template<class _Ty> inline typename tr1::_Remove_reference<_Ty>::_Type&& move(_Ty&& _Arg) { // forward _Arg as movable return ((typename tr1::_Remove_reference<_Ty>::_Type&&)_Arg); } 最初に奇妙なのは、パラメータ(_Ty && _Arg)です。これは、以下のように関数を呼び出すと、 // main() Object obj1; Object obj2 = std::move(obj1); 基本的には // std::move() _Ty&& _Arg = Obj1; しかし、すでにご存じのように、LValueをRValue参照に直接リンクすることはできません。 _Ty&& _Arg = (Object&&)obj1; ただし、std :: move()がすべての値に対して機能する必要があるため、これは馬鹿げています。 これがどのように機能するかを完全に理解するために、私はこれらの構造体も確認する必要があります。 …

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