lvalue

    0

    1答えて

    列挙型の値を代入しようとすると、C++でひどいプログラムがあります。 WallまたはFreeなどをsokoban.board[j,i]に割り当てるとエラーが発生します。 bool loadLevel(ifstream &stream, tSokoban &sokoban, int level) { bool ok = false; string levelStr, levelF

    0

    1答えて

    ので、我々はC++で次のように書くと仮定します。a=b=5;基本的に私たちはa=5;を持っている場合はa=(b=5); は、私は5リテラルであり、したがって、それはR-値であることを知っていることを意味します。 aはL値です。同じことがb=5; のために行く私たちは、それぞれa=(b=5); a=b=5;を書く場合、私は今、次のことを言うことができ、何が起こるか、今思ったんだけど? aについては、

    6

    1答えて

    右辺値を左辺値に変換できないのはなぜですか?しかし、反対方向に変換することは可能です。技術的な価値はメモリアドレスを持っていますね。

    3

    1答えて

    代わりに、基本クラス内の関数(左辺値)の派生クラスでメソッド呼び出し(左辺値)関数に結合(右辺値):私は template <class T> class Comparable { protected: Comparable(){}; public: virtual int compare(const T&&)=0; int compar

    3

    1答えて

    何か不足しているかどうかは分かりませんが、何も返すことのできないユーザー定義関数を呼び出すユーザー定義リテラルも一種のリテラルです。ではないことリテラル5_aを(プルーフGCCとクランの両方で #include <iostream> #include <typeinfo> int& operator""_a(unsigned long long c); int main() {

    0

    1答えて

    この場合、どうなりますか? // assume WeakPtr is valid and has not expired const auto& something = WeakPtr.lock(); something->doStuff(); これは未定義ですか? このシナリオでは変更されますか? std::shared_ptr<Something> getSomething() { r

    3

    1答えて

    私はHereを記述して、左辺値と右辺値の概念を学んでいます。 しかし、自分の例を次のように考案すると、VS2017を使ってコンパイルしても何のエラーもなく実行されます。私は、ケース1の場合は、 produceA(10).operator=(A()) と同じであることを知りました。しかし、私はまだケース2と3が許される理由を理解していません。事実、ケース2はこの記事で与えられた例と矛盾する。私は

    3

    2答えて

    私はstd::forwardと混同していると思います。 std::forwardを使用している私の機能は以下のとおりですが、説明を簡単にするためには大幅に簡略化され修正されています。 // This is an example code to explain my question simply. template <typename Element> void add(Element&& e

    4

    2答えて

    の左オペランドとして必要な左辺値は、次のコードを考えてみましょう: #include <iostream> using namespace std; class X { int i; public: X(int ii = 0); }; X::X(int ii) { i = ii; } int a; X f1() { return X(); } int

    1

    1答えて

    仕様は、行列の要素にアクセスして割り当てるために括弧()演算子をオーバーロードすることですが、私のオーバーロード関数が返す必要があるものを把握するのは苦労しています。 ブリーフメイン: //The .h files and everything has been included, my other functions work just not this one cout << "Test()