了解,;模板中的运算符 所以我现在正在阅读SAMS,教你自己C++,我不能弄明白使用和运算符的时间和原因,因为在很多情况下它似乎是不必要的,比如: template <typename objectType> objectType & GetMax (const objectType & value1, const objectType & value2) { if (value1 > value2) return value1; else return value2; }; 模板 objectType和GetMax(常量objectType和value1、常量objectType和value2) { 如果(值1>值2) 返回值1; 其他的 返回值2; };
另一个例子:了解,;模板中的运算符 所以我现在正在阅读SAMS,教你自己C++,我不能弄明白使用和运算符的时间和原因,因为在很多情况下它似乎是不必要的,比如: template <typename objectType> objectType & GetMax (const objectType & value1, const objectType & value2) { if (value1 > value2) return value1; else return value2; }; 模板 objectType和GetMax(常量objectType和value1、常量objectType和value2) { 如果(值1>值2) 返回值1; 其他的 返回值2; };,c++,C++,另一个例子: Template <typename T> class myTemplateClass { public: void SetVariable (T& newValue) {m_Value = newValue; }; T& GetValue() {return m_Value;}; private: T m_Value; }; 模板 类myTemplateClass { 公众: void Se
Template <typename T>
class myTemplateClass
{
public:
void SetVariable (T& newValue) {m_Value = newValue; };
T& GetValue() {return m_Value;};
private:
T m_Value;
};
模板
类myTemplateClass
{
公众:
void SetVariable(T&newValue){m_Value=newValue;};
T&GetValue(){返回m_值;};
私人:
T m_值;
};
请帮助我理解为什么&,我知道它获取数据类型的地址,在这里!这绝对不会让学习STL变得更容易。。。。。。。。。。谢谢!=) 这不是运算符,也与模板没有(直接)关系 它是一个类型修饰符,创建(或指示、表示或形成)引用,就像
*
创建指针一样
很多时候,这是一种优化,而不是一种必要。有必要的两种或三种情况:
- 在复制构造函数中,需要避免无限递归:
Const引用通常不必复制大型对象,这是一种非常有用的优化,没有令人惊讶的行为class X { //X(X); // pass by value, the formal parameter is a copy of the actual parameter // the copy constructor must be called to make the copy X(const X&); // pass by reference, ok, no copy constructor call necessary };
- 当函数的返回类型,尤其是
重载必须出现在表达式的左侧时:运算符[]
}) 与此类似,对于改变其左操作数的运算符(如复合赋值和流插入),有必要使用非常量引用参数class Container { //Element operator[](int index); // problematic because c[i] is a temporary // so c[i] = 5; doesn't actually modify the collection, like it would with an array Element& operator[](int index); // correct
auto_ptr a=newint(5);f(a);/*是否仍然有效*/代码>
这就引出了案例3(创建原因是有人在运算符之外使用了非常量引用):
- 在模板中,当实际类型可能由
auto_ptr
或unique_ptr
生成时,需要一个引用以避免推断破坏原始类型的类型:
auto_ptr<int> a = new int(5);
//template<typename T>
//void dump_target( T handle ) { cout << *item; }
// bad: dump_target(a); destroys *a
template<typename T>
void dump_target( const T& handle ) { cout << *item; } // correct
auto_ptr a=新整数(5);
//模板
//ValueDimpAgTalk(t句柄){Cut-FutualPursialPosiple,它是不一样的,你知道哪个得到了一个对象的地址。它是一个完全不同的用途。你需要一本关于C++的好书……并且不要把自己灌输到模板中,至少等到你知道什么是参考。