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

このタグは、C ++ 11としてコンパイルする必要があるコードに使用します(C ++ 14以降で導入された機能は使用しません)。


5
UnicodeはC ++ 11でどの程度サポートされていますか?
C ++ 11がUnicodeをサポートしていることを読んだり聞いたりしました。それに関するいくつかの質問: C ++標準ライブラリはどの程度Unicodeをサポートしていますか? ないstd::string何それが必要ですか? どうやって使うの? 潜在的な問題はどこにありますか?
183 c++  unicode  c++11 

2
safe-boolイディオムはC ++ 11で廃止されましたか?
@Rのこの答え。Martinho Fernandesは、セーフブールイディオムは単純にC ++ 11で置き換えられるため、C ++ 11では廃止されることを示しています。 explicit operator bool() const; 答えの標準的な見積もりによると§4 [conv] p3: 式eは、いくつかの発明された一時変数(§8.5)Tの宣言T t=e;が整形式である場合に限り、暗黙的に型に変換できますt。特定の言語構成では、式をブール値に変換する必要があります。そのeようなコンテキストに現れる式は、いくつかの発明された一時変数t(§8.5)について、宣言が整形式である場合に限り、文脈変換されbool、整形式bool t(e);であると言われます。 強調表示された部分は、「暗黙の明示的キャスト」(標準では「コンテキスト変換」と呼ばれます)を@Rとして明確に示しています。マルティーニョが言った。 「暗黙の明示的キャスト」を必要とする「特定の言語構成体」は、次のように見えます。 if、while、for(§6.4 [stmt.select] p4) 二項論理演算子&&と||(§5.14 [expr.log.and/or] p1両方) 論理否定演算子!(§5.3.1 [expr.unary.op] p9) 条件演算子?:(§5.14 [expr.cond] p1) static_assert(§7 [dcl.dcl] p4) noexcept(§15.4 [except.spec] p2) タイトルの仮定は正しいですか?潜在的な欠点を見落としていないことを願っています。

6
反復しながらマップから削除する方法は?
反復しながらマップから削除するにはどうすればよいですか?お気に入り: std::map<K, V> map; for(auto i : map) if(needs_removing(i)) // remove it from the map 使用map.eraseするとイテレータが無効になります
177 c++  map  c++11 

4
constexprでstd :: stringを使用することは可能ですか?
C ++ 11、Ubuntu 14.04、GCCデフォルトツールチェーンを使用します。 このコードは失敗します: constexpr std::string constString = "constString"; エラー:constexpr変数 'c​​onstString'のタイプ 'const string {aka const std :: basic_string}'はリテラルではありません... 'std :: basic_string'は自明でないデストラクタを持っているためです それを使用することが可能であるstd::stringにconstexpr?(どうやらそうではない...)もしそうなら、どうやって?で文字列を使用する別の方法はありconstexprますか?

2
配列へのshared_ptr:使用する必要がありますか?
に関する小さなクエリshared_ptr。 shared_ptr配列を指すことを使用するのは良い習慣ですか?例えば、 shared_ptr<int> sp(new int[10]); そうでない場合、なぜそうではないのですか?私がすでに認識している理由の1つは、を増減できないことshared_ptrです。したがって、配列への通常のポインタのように使用することはできません。
172 c++  c++11  shared-ptr 

3
std :: atomicとは正確には何ですか?
私はそれstd::atomic<>がアトミックオブジェクトであることを理解しています。しかし、どの程度アトミックですか?私の理解では、操作はアトミックである可能性があります。オブジェクトをアトミックにすることは正確にはどういう意味ですか?たとえば、次のコードを同時に実行する2つのスレッドがあるとします。 a = a + 12; 次に、操作全体(たとえばadd_twelve_to(int))はアトミックですか?または、変数atomic(so operator=())に変更が加えられていますか?

2
なぜラムダは単純な関数よりもコンパイラによって最適化できるのですか?
彼の本の中でThe C++ Standard Library (Second Edition)Nicolai Josuttisは、ラムダは単純な関数よりもコンパイラによってより最適化できると述べています。 さらに、C ++コンパイラは、通常の関数よりもラムダを最適化します。(213ページ) 何故ですか? インライン化に関しては、これ以上何の違いもないはずだと思いました。私が考えることができる唯一の理由は、コンパイラーがラムダを使用したより良いローカルコンテキストを持っている可能性があり、そのようなことがより多くの仮定を行い、より多くの最適化を実行できるためです。


5
operator&がオーバーロードされているときに、オブジェクトのアドレスを確実に取得するにはどうすればよいですか?
次のプログラムを検討してください。 struct ghost { // ghosts like to pretend that they don't exist ghost* operator&() const volatile { return 0; } }; int main() { ghost clyde; ghost* clydes_address = &clyde; // darn; that's not clyde's address :'( } clydeのアドレスを取得するにはどうすればよいですか? すべてのタイプのオブジェクトに対して同等に機能するソリューションを探しています。C ++ 03ソリュ​​ーションがいいですが、C ++ 11ソリューションにも興味があります。可能であれば、実装固有の動作は避けてください。 C ++ 11のstd::addressof関数テンプレートは知っていますが、ここでは使用しません。標準ライブラリの実装者がこの関数テンプレートを実装する方法を知りたいのですが。

6
C ++ 11、14、17、または20は、piの標準定数を導入しますか?
CとC ++のpiの数値にはかなりばかげた問題があります。私が知る限り、でM_PI定義されてmath.hいることは、どの規格でも要求されていません。 新しいC ++標準では、標準ライブラリに複雑な数学の多くが導入されました-双曲線関数、std::hermiteおよびstd::cyl_bessel_i、さまざまな乱数ジェネレータなど。 「新しい」標準のいずれかがパイの定数をもたらしましたか?そうでない場合-なぜですか?この複雑な数学はそれなしでどのように機能しますか? 私はC ++のpiに関する同様の質問を認識しています(それらは数年前のものであり、標準から古くなっています); 問題の現状を知りたいのですが。 なぜ C ++にはまだpi定数がないのに、もっと複雑な数学がたくさんあるのか、という理由にも非常に興味があります。 UPD:自分でpiを4 * atan(1)またはacos(1)またはdouble pi = 3.14として定義できることを知っています。承知しました。しかし、なぜ2018年に私はまだそれをしなければならないのですか?標準の数学関数はpiなしでどのように機能しますか? UPD2:2019年7月にケルンで開催されたC ++委員会のこの出張レポートによると、提案P0631(数学定数)がC ++ 20に受け入れられました。つまり、ついに標準ライブラリに数piが含まれるようになります!

6
1つのクラスのメンバー関数でジェネリックstd :: functionオブジェクトを使用する
1つのクラスについて、同じクラスのメンバー関数への関数ポインターを1つのmap格納std::functionオブジェクトに格納したい。しかし、私は最初にこのコードで失敗します: class Foo { public: void doSomething() {} void bindFunction() { // ERROR std::function<void(void)> f = &Foo::doSomething; } }; 私は受信error C2064: term does not evaluate to a function taking 0 argumentsにxxcallobjいくつかの奇妙なテンプレートのインスタンスエラーと組み合わせます。現在、Visual Studio 2010/2011を搭載したWindows 8で作業していますが、VS10を搭載したWin 7では失敗します。エラーは、私が従わないいくつかの奇妙なC ++ルールに基づいている必要があります

2
パブリックフレンドスワップメンバー機能
copy-and-swap-idiomへの美しい答えには、少し助けが必要なコードがあります。 class dumb_array { public: // ... friend void swap(dumb_array& first, dumb_array& second) // nothrow { using std::swap; swap(first.mSize, second.mSize); swap(first.mArray, second.mArray); } // ... }; そして彼はメモを追加します タイプにstd :: swapを特化し、自由関数スワップと並んでクラス内スワップを提供する必要があるという他の主張があります。しかし、これはすべて不必要です。スワップの適切な使用は、修飾されていない呼び出しによるものです。 、そして私たちの機能はADLを通じて発見されます。1つの関数が行います。 でfriend、私は「非友好的」という用語には少しだ、私は認めなければなりません。だから、私の主な質問は: 無料の関数のように見えますが、そのクラス本体の内部ですか? なぜこれはswap静的ではないのですか?明らかにメンバー変数を使用しません。 「スワップを適切に使用すれば、ADL経由でスワップが見つかります」?ADLは名前空間を検索しますよね?しかし、それはクラスの内部も調べますか?それともどこからfriend来るのですか? 副質問: C ++ 11では、をでマークする必要swapがありnoexceptますか? C ++ 11とすると、範囲のために、私は配置する必要がありますfriend iter begin()し、friend iter end()クラス内の同じように?friendここでは必要ないと思いますよね?

3
「= default」はデフォルトのコンストラクタとデストラクタの「{}」とどう違うのですか?
もともとはデストラクタについての質問としてこれを投稿しましたが、今はデフォルトのコンストラクタの考慮を追加しています。元の質問は次のとおりです。 クラスに仮想のデストラクタを与えたいが、それ以外はコンパイラが生成するものと同じである場合は、次のように使用できます=default。 class Widget { public: virtual ~Widget() = default; }; しかし、空の定義を使用して入力を減らすことで同じ効果を得ることができるようです: class Widget { public: virtual ~Widget() {} }; これらの2つの定義が異なる動作をする方法はありますか? この質問に投稿された回答に基づくと、デフォルトのコンストラクタの状況は似ているようです。デストラクタの「=default」と「{}」の意味にほとんど違いがないことを考えると、デフォルトのコンストラクタのこれらのオプションの意味にも同様にほとんど違いはありませんか?つまり、そのタイプのオブジェクトが作成されて破壊されるタイプを作成したいと仮定すると、なぜ私は言いたいのですか? Widget() = default; の代わりに Widget() {} ? 元の投稿後にこの質問を拡張すると、SOのルールに違反することになります。デフォルトのコンストラクタについてほぼ同じ質問を投稿することは、あまり望ましくない選択肢であると私を思いました。


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