Questions tagged [reference-binding]
21 questions
37
votes
2 answers
C++ - using const reference to prolong a member of a temporary, ok or UB?
consider something like this:
#include
struct C {
C(double x=0, double y=0): x(x) , y(y) {
std::cout << "C ctor " << x << " " <

user2717954
- 1,822
- 2
- 17
- 28
26
votes
3 answers
Is it ok to return default argument's value by const reference?
Is it ok to return default argument's value by const reference like in the examples below:
https://coliru.stacked-crooked.com/a/ff76e060a007723b
#include
const std::string& foo(const std::string& s = std::string(""))
{
return s;
}
int…

FrozenHeart
- 19,844
- 33
- 126
- 242
19
votes
6 answers
Copy initialization with deleted copy constructor in reference initialization
Consider the follow code:
#include
class Data{
public:
Data() = default;
Data(Data const&) = delete;
Data(int) {
}
};
int main(){
int a = 0;
const std::string& rs = "abc"; // rs refers to temporary copy-initialized…

xmh0511
- 7,010
- 1
- 9
- 36
13
votes
2 answers
Does this C++ static analysis rule make sense as is?
I'm implementing some C++ static analysis rules, and one of them prohibits a function from returning a reference or pointer to a reference parameter of the function, i.e. the following are all non-compliant:
int *f(int& x) { return &x; } // #1
const…

Stuart Golodetz
- 20,238
- 4
- 51
- 80
10
votes
1 answer
Is a const reference bound to another reference which is cast from temporary a dangling reference?
Below is the code snippet:
#include
using namespace std;
struct B{
int b;
~B(){cout <<"destruct B" << endl;}
};
B func(){
B b;
b.b = 1;
return b;
}
int main(){
const B& instance = (const B&)func(); //is…

choxsword
- 3,187
- 18
- 44
5
votes
1 answer
Will temporary object be deleted if there is no const reference to it?
Lets take a look to this two functions:
std::string get_string()
{
std::string ret_value;
// Calculate ret_value ...
return ret_value;
}
void process_c_string(const char* s)
{
std::cout << s << endl;
}
And here are two possible…

Mihran Hovsepyan
- 10,810
- 14
- 61
- 111
5
votes
2 answers
Why is a double convertible to a const-reference of seemingly any primitive?
Consider the following code:
#include
float func(char const & val1, unsigned int const & val2)
{
return val1 + val2;
}
int main() {
double test1 = 0.2;
double test2 = 0.3;
std::cout << func(test1, test2) << std::endl;
…

R_Kapp
- 2,818
- 1
- 18
- 32
5
votes
1 answer
shared_ptr to const shared_ptr&
I feel confused about shared_ptr, and my main question is: does c++ create a new object (shared_ptr object) when I do the following?
void Func1(const shared_ptr& rhs) {}
void Func2(const shared_ptr& rhs) {}
shared_ptr…

JJ.
- 111
- 11
4
votes
2 answers
Cast from shared pointer to shared pointer to const
The following code does not compile:
#include
#include
class A
{
public:
A( )
: m_i( new int )
{ }
std::shared_ptr< const int >&
get( )
{
return m_i; // <-- invalid initialization of…

nyarlathotep108
- 5,275
- 2
- 26
- 64
3
votes
1 answer
Does forming a reference to an object constitute access?
Does forming a reference to an object constitute access?
Here's what GCC and Clang currently do:
void test(int const volatile* ptr) noexcept {
*ptr; // movl (%rdi), eax // Reads *ptr
[[maybe_unused]] int const volatile& ref = *ptr; // Does…

Filipp
- 1,843
- 12
- 26
3
votes
2 answers
Using placement new to update a reference member?
Is the following code legal in C++?
template
class Foo {
public:
Foo(T& v) : v_(v) {}
private:
T& v_;
};
int a = 10;
Foo f(a);
void Bar(int& a) {
new (&f)Foo(a);
}
References are not supposed to be bound twice,…

xiaofeng.li
- 8,237
- 2
- 23
- 30
2
votes
1 answer
Best viable conversion function
In the following program, which (if any) conversion function should be selected and why?
int r;
struct B {};
struct D : B {};
struct S {
D d;
operator D&(){r=1; return d;} // #1
operator B&(){r=2; return d;} // #2
};
int main() {
S s;
B& b…

Jan Tušil
- 958
- 5
- 16
2
votes
1 answer
Non-const lvalue reference to type 'A *' cannot bind to a value of unrelated type 'std::shared_ptr'
First of all, there are bunch of similar posts which appear like they are exactly the same issue, but I find that they are different from my problem. I am trying to use smart pointers for the first time in my C++ life. I have trouble making…

Arun Kumar
- 634
- 2
- 12
- 26
2
votes
2 answers
Prolonging life of a temporary object using const reference
I need a few clarification regarding const reference.
From this link:
const Foo &myFoo = FuncBar();
const reference extended the life of the local object. But when I checked this link although they used a const reference
Sandbox(const string& n) :…

user3762146
- 205
- 3
- 13
2
votes
0 answers
Reference initialization and direct vs indirect binding
Consider the following case
struct A {
operator int();
};
int &&x = A();
The spec says at http://eel.is/c++draft/dcl.init.ref#5 about whether the reference binding is direct or indirect
In all cases except the last (i.e., creating and…

Johannes Schaub - litb
- 496,577
- 130
- 894
- 1,212