脚扭伤存在骨折或者韧带损伤,有以下原因:1、发生踝关节骨折,骨折的断端有大量出血,出血淤积在关节腔里,踝关节会慢慢肿胀,呈进行性的肿胀,需要进行X片检查,排除骨折。2、踝关节韧带损伤,特别是有韧带断裂,断裂的韧带断端会有大量出血,血液淤积在踝关节中,这个时候首先要进行X片检查,然后再进行踝关节核磁共振检查,明确踝韧带断裂的部位和断裂的严重程度。
<br>++的类型是const Age,自然不能对它进行前置++、后置++、赋值等操作。<br>++a的类型是Age&,当然可以对它进行前置++、后置++、赋值等操作<br>a++的返回类型为什么要是const对象呢?<br>有两个原因:<br>如果不是const对象,a(++)++这样的表达式就可以通过编译。但是,其效果却违反了我们的直觉。a其实只增加了1,因为第二次自增作用在一个临时对象上。另外,对于内置类型,(i++)++这样的表达式是不能通过编译的。自定义类型的操作符重载,应该与内置类型保持行为一致。<br>a++的返回类型如果改成非const对象,肯定能通过编译,但是我们最好不要这样做。<br>++a的返回类型为什么是引用呢?<br>这样做的原因应该就是:与内置类型的行为保持一致。前置++返回的总是被自增的对象本身。因此,++(++a)的效果就是a被自增两次。<br>形参的区别<br>前置++没有形参,而后置++有一个int形参,但是该形参也没有被用到。很奇怪,难道有什么特殊的用意?<br>其实也没有特殊的用意,只是为了绕过语法的限制。<br>前置++与后置++的操作符重载函数,函数原型必须不同。否则就违反了“重载函数必须拥有不同的函数原型”的语法规定。<br>虽然前置++与后置++的返回类型不同,但是返回类型不属于函数原型。为了绕过语法限制,只好给后置++增加了一个int形参。<br>原因就是这么简单,真的没其他特殊用意。其实,给前置++增加形参也可以;增加一个double形参而不是int形参,也可以。只是,当时就这么决定了。<br>代码实现的区别<br>前置++的实现比较简单,自增之后,将*this返回即可。需要注意的是,一定要返回*this。<br>后置++的实现稍微麻烦一些。因为要返回自增之前的对象,所以先将对象拷贝一份,再进行自增,最后返回那个拷贝。<br>在Age的代码中,后置++利用了前置++来实现自增。这样做是为了避免“自增的代码”重复。<br>在本例中,自增的代码很简单,就是一行++i,没有必要这样做。但是在其它自增逻辑复杂的例子中,这么做还是很有必要的。<br>效率的区别<br>如果不需要返回自增之前的值,那么前置++和后置++的计算效果都一样。但是,我们仍然应该优先使用前置++,尤其是对于用户自定义类型的自增操作。<br>前置++的效率更高,理由是:后置++会生成临时对象。<br>从Age的后置++的代码实现也可以看出这一点。const Age operator++(int) //后置++ &#9; { &#9; Age tmp = *this; &#9; ++(*this); //利用前置++ &#9; return tmp; &#9; }<br>很明显,tmp是一个临时对象,会造成一次构造函数和一次析构函数的额外开销。虽然,编译器在某些情况下可以优化掉这些开销。但是,我们最好不要依赖编译器的行为。<br>所以,在非内置类型的时候,尽量使用前置++,因为效率高(后置自增,效率低)<br><img><br><img><br><img><br><img><br><img><br><img><br><img><br><img>