这篇文章展示C++中引用和指针的关系.
- //==============================
- typedef struct _tag_ref
- {
- union{
- void *p;
- std::string &r;
- };
- _tag_ref(std::string &s):r(s){};
- }REF;
- std::string & refparam(REF& ref);
- //==============================
- std::string & refparam(REF& ref)
- {
- std::cout << std::hex << ref.p << std::endl;
- return ref.r;
- }
- //==============================
- {
- std::string s("addr");
- REF ref(s);
- refparam(ref);
- std::cout << std::hex << &s << std::endl;
- }
今天看了C++ Template一书,书中提到string literal和reference在进行类型推导时的区别。
这个可能是引用比较特别的地方吧。
- template<typename T>
- inline T const& max(T const& a, T const& b)
- {
- return (a > b) ? a : b;
- }
- //string literal
- max("abc", "abcd");
- //失败,因为"abc"和"abcd"的类型不同
- //一个是char const[3],另一个是char const[4]
- //如果把模板改成传值
- template<typename T>
- inline T max(T a, T b)
- {
- return (a > b)? a : b;
- }
- max("abc", "abcd");
- //成功,参数会被推导成char const*;