lvalue 및 rvalue를 학습합니다. 정의는 "주소"가 될 수있는 것이 무엇이든간에 왼쪽 값이고 그렇지 않으면 rvalue입니다. 연산자 우선 순위를 확인한 결과 접두사와 접미사 증가 모두가 "주소"연산자보다 우선합니다. 다음 두 예제의 경우 첫 번째 "& ++ value1"은 좌변표이고 두 번째 것은 "& value1 ++"가 rvalue 인 이유를
void* 걸리고, 일부 메모리를 복사 한 다음 포인터를 이동하는 함수를 만들려고합니다. 그것은 무효 포인터이기 때문에 , 나는 내가 char*에 캐스팅과 같이, 그 이동 거라고 생각 : 약 ((char*)dest) 표현을 말하는이 PVOID SendAndMoveHead(PVOID dest, const Message& message, const size_t
임시 객체의 멤버 함수 (C++)를 호출하는 방법 금지를 : 그 포인터가 data_ptr의 생성자 내부 또한 operator T*() { return m_pPtr; }
을 "고정 된"메모리와 소멸자는 "고정 해제"됩니다. 나는 operator* 사용 금지하려면이 방법입니다 ... data_ptr<T> GetSomeDataPtr { return data_
그래서 C++에서 다음과 같은 우리가 쓰기 가정 a=b=5;을 우리가 내가 5 리터럴 것을 알고 따라서는 R-값이 a=5;이있는 경우 기본적으로 a=(b=5); 을 의미한다. a은 L 값입니다. 동일은 우리가 각각 a=b=5; 쓰기 a=(b=5); 내가 지금 다음과 같은 말을 할 수 있다면, 무슨 일이 지금 궁금하네요 b=5; 에 간다? a의 경우, b=5
대신 기본 클래스의 기능 (좌변)의 파생 클래스에서 메서드 호출 (좌변) 함수 바인딩 (를 rvalue) : 내가 한 template <class T>
class Comparable
{
protected:
Comparable(){};
public:
virtual int compare(const T&&)=0;
나는 뭔가를 놓치고 있는지 잘 모르겠지만 아무것도 반환 할 수있는 사용자 정의 함수를 호출하는 사용자 정의 리터럴도 일종의 리터럴입니다. 이 표준은, 그것이 문자열 리터럴이 아닌 리터럴이 prvalue는 항상 말한다 but : 입증한다 모두 GCC와 연타에 #include <iostream>
#include <typeinfo>
int& operator
이 경우 어떻게됩니까? // assume WeakPtr is valid and has not expired
const auto& something = WeakPtr.lock();
something->doStuff();
이것은 정의되지 않았습니까? 이 시나리오에서 변경 되나요? 어때요? 이 경우 const auto& 각에서 std::vector<int
나는 lvalue와 rvalue의 개념을 배우기 위해 Here을 연습하고 있습니다. 그러나 다음과 같이 자신의 예제를 고안하면 VS2017을 사용하여 오류없이 컴파일되고 실행됩니다. 나는 사례 1에서 전화 한 것과 동일하다는 것을 배웠다. produceA(10).operator=(A())
따라서 합법적이다. 그러나 나는 아직도 케이스 2와 3이 허용되는
C++에서 합성 패턴 및 상속과 함께 약간 연주했습니다. 그것은 뭔가 특별한 것이어서는 안된다. 나는 컴포넌트가 부모를 컴포지트로 가지고 있다는 것을 코딩했다. 컴포지트는 컴포넌트로부터 파생되고 그것의 기본 클래스 (Component)에서 생성자를 사용해야한다. 그러나 나는 다음과 같은 오류 있어요 : 조금으로 조사 "Cannot convert lvalue