Why a default assignment operator not synthesis by compiler if a class has a reference data member
By : Gabriele Gaggi
Date : March 29 2020, 07:55 AM
this will help In C++, if a class has a reference data member the default assignment operator is not synthesized by compiler. Why?
|
c++ string , pass by reference generates error from compiler
By : sd_pune
Date : March 29 2020, 07:55 AM
hope this fix your issue Your string is actually a const char *, you are constructing an rvalue string from that const char * when calling the function, but your function needs an lvalue, since the reference is not const. This will work: code :
string mystring("");
gp(res, mystring, 0, 0, n);
|
Why compiler cannot decide which function to call without the reference operator?
By : helensburgh beekeepe
Date : March 29 2020, 07:55 AM
I hope this helps . This is a question about overload resolution, which nobody has yet addressed. Let's ignore templates for the moment, since they're not strictly relevant, and let's pretend we these overloads declared: code :
void foo(int& ); // (1)
void foo(const int&); // (2)
int i;
foo(i);
template <typename T> T max(T&, T&); // (1)
template <typename T> T const& max(T const&, T const&); // (2)
void foo(int& ); // (1)
void foo(const int&); // (2)
void foo(int ); // (3)
template <typename T> T max(T, T); // (3)
template <Typename T> T const& max(T const&, T const&); // (2)
|
Compiler error C2280, attempting to reference a deleted function operator=
By : Gerffson Júnior
Date : March 29 2020, 07:55 AM
it should still fix some issue The deleted function is the assignment operator. Property cannot be assigned because the const member groups cannot be assigned. The most logical solution to this is to declare groups to be static so that all instances of Property share it and it does not need to be assigned. Eg: code :
static const std::array <std::string, 10> groups;
const std::array <std::string, 10> Property::groups{ "Brown", "Light Blue", "Pink",
"Orange", "Red", "Yellow", "Green",
"Dark Blue", "Railroad", "Utility" };
class test
{
public:
const int a = 10;
};
test& operator=(const test & src)
{
a = src.a;
return *this;
}
test& operator=(const test & src)
{
// deliberately does not assign a = src.a
return *this;
}
int main()
{
test a{11}; // a const variable cannot be changed after initialization,
// but this initializes a to 11.
test b; // uses the default of 10
std::cout << a.a << ',' << b.a; // output 11,10
a = b; //this can't really be be done. a can never equal b
}
|
Ternary operator: Compiler does not emit return reference of local variable warning
By : Arthur Balser
Date : March 29 2020, 07:55 AM
this one helps. As for the actual code in your question: No temporary objects are created because both your max and operator+ take their arguments and return their results by reference. Thus the code is actually valid (if weird / misleading). However, if we simplify your code to a version that actually contains a bug: code :
struct A
{
static int &foo(int &x)
{
int a = 42;
return x < a ? x : a;
}
};
int main()
{
int n = 0;
return A::foo(n);
}
static int &foo(int &x)
{
int a = 42;
return x < a ? x : a;
}
int main()
{
int n = 0;
return foo(n);
}
struct A
{
int &foo(int &x)
{
int a = 42;
return x < a ? x : a;
}
};
int main()
{
A wtf;
int n = 0;
return wtf.foo(n);
}
int &foo(int &x)
{
int a = 42;
return x < a ? x : a;
}
int main()
{
int n = 0;
return foo(n);
}
.code.tio.cpp: In function ‘int& foo(int&)’:
.code.tio.cpp:4:24: warning: function may return address of local variable [-Wreturn-local-addr]
return x < a ? x : a;
^
|