N
Nephi Immortal
Please confirm if I am correct.
If you assign “unsigned char” to typename T, then T data is
translated to unsigned char data as passing copy value.
If you assign “unsigned char &” to typename T, then T data is
translated to unsigned char &data as passing reference.
template< typename L, typename R >
class X {
public:
X< L, R >( L data ) : m_data( data ) {
}
X< L, R > &operator=( R data ) {
m_data = data;
return *this;
}
L m_data;
};
typedef unsigned char size_8;
int main () {
size_8 data = 0x34U;
const X< size_8, size_8 > A( 0x12U ); // constant
X< size_8 &, size_8 > B( data ); // reference
A.m_data++; // error cannot modify left value because of constant
class
B.m_data++; // can modify non-constant class
return 0;
}
If you assign “unsigned char” to typename T, then T data is
translated to unsigned char data as passing copy value.
If you assign “unsigned char &” to typename T, then T data is
translated to unsigned char &data as passing reference.
template< typename L, typename R >
class X {
public:
X< L, R >( L data ) : m_data( data ) {
}
X< L, R > &operator=( R data ) {
m_data = data;
return *this;
}
L m_data;
};
typedef unsigned char size_8;
int main () {
size_8 data = 0x34U;
const X< size_8, size_8 > A( 0x12U ); // constant
X< size_8 &, size_8 > B( data ); // reference
A.m_data++; // error cannot modify left value because of constant
class
B.m_data++; // can modify non-constant class
return 0;
}