Questions tagged [pass-by-rvalue-reference]

37 questions
33
votes
3 answers

Does the C++ standard guarantee that a failed insertion into an associative container will not modify the rvalue-reference argument?

#include #include #include using namespace std::literals; int main() { auto coll = std::set{ "hello"s }; auto s = "hello"s; coll.insert(std::move(s)); assert("hello"s == s); // Always OK? } Does the C++…
xmllmx
  • 39,765
  • 26
  • 162
  • 323
10
votes
3 answers

Why can't I pass an rvalue-reference as it is to another function in C++11?

I have a code: void f(int&& i) { auto lambda = [](int&& j) { (void)j; } lambda(i); } int main() { f(5); } Clang++ gives an error: no known conversion from 'int' to 'int &&' for 1st argument Why the i changes its type to int when being passed…
abyss.7
  • 13,882
  • 11
  • 56
  • 100
10
votes
1 answer

Pass by value or universal reference

I want to develop a small polymorphic class with type erasure and I wonder which version of the templatized constructor is better and should be used. We can pass by value: class A { ... template< typename T > A( T t ) { /* create the…
10
votes
4 answers

prevent pass-by-ref of temporary object

I have a class that 'remembers' a reference to some object (e.g. an integer variable). I can't have it reference a value that's destructed immediately, and I'm looking for a way to protect the users of my class from doing so by accident. Is an…
xtofl
  • 40,723
  • 12
  • 105
  • 192
7
votes
3 answers

Returning an argument passed by rvalue reference

If I have a class A and functions A f(A &&a) { doSomething(a); return a; } A g(A a) { doSomething(a); return a; } the copy constructor is called when returning a from f, but the move constructor is used when returning from g. However, from…
Jeremy B.
  • 81
  • 1
  • 7
6
votes
2 answers

Can I forbid temporary objects as parameters?

Let's say I have the function: void foo(Object& o) { /* only query o, dont alter it*/ } Is it possible to call this function only with already constructed objects and have Visual Studio throw a compile error if I call the function with a…
6
votes
2 answers

Do rvalue references have the same overhead as lvalue references?

Consider this example: #include // runtime dominated by argument passing template void foo(T t) {} int main() { int i(0); foo(i); // fast -- int is scalar type foo(i); // slow -- lvalue reference…
Taylor Nichols
  • 588
  • 2
  • 13
5
votes
1 answer

(c++23 implicit move) Returning the moved local storage variable as an rvalue ref with only parenthesisses?

Regarding the proposal "Simpler implicit move" (P2266R1), I'm not sure if I understand this new "move-eligible" things correctly. Please correct these points if incorrect: [LIVE] std::forward becomes optional for perfect forwarding the rvalue ref…
5
votes
1 answer

Custom type conversion operator doesn't work when invoked on a forwarding reference (works when object is passed by value)

I can't fathom the essence of this error so pardon me if the title could be better. This code fails to compile: template struct value_as_type { using type = decltype(v); static constexpr type value {v}; constexpr operator…
Violet Giraffe
  • 32,368
  • 48
  • 194
  • 335
4
votes
2 answers

Why the rvalue reference parameter cannot be passed between functions directly?

My code is as follows: #include using namespace std; class A{ public: void sendByRvalue(string&& str){ cout << str << endl; } }; class B{ private: A a; void send(string&& str){ a.sendByRvalue(str); …
4
votes
1 answer

Return rvalue reference vs return by value in function return type

In my code I have a function that constructs a string from a piece of data and then returns it. This string isn't used anywhere else, so it's safe for the receiving side to use move-assignment or move-initialization on it. std::string…
4
votes
1 answer

Confusing error messages with named rvalue references

Consider the following: struct my_type {}; my_type make_my_type() { return my_type{}; } void func(my_type&& arg) {} int main() { my_type&& ref = make_my_type(); func(ref); } Needless to say, this code doesn't compile. I realise that I…
3
votes
1 answer

Why does C++ give preference to rvalue reference over const reference while function call?

So I wrote a code in C++ 11 #include using namespace std; void print (int &&a) { cout<<"rval ref"; } void print (const int& a) { cout<<"const ref"; } int main() { print(9); } The output of code was fascinating that it…
3
votes
2 answers

Passing only value for private members

I am creating a class with one array as its private member and getter,setter method for that. I want set a value to that array using an array in main function. When I manipulate the array in main function, it should not affect the array present in…
3
votes
4 answers

What is the most efficient way to set class variable using rvalue in c++?

I just started working with c++11 r-values. I read some tutorials, but I haven't found the answer. What is the best way (the most efficient way) to set a class variable? Is below code correct or not? (let's assume std::string has defined move…
marco
  • 111
  • 2
  • 8
1
2 3