For*_*veR 10 c++ visual-studio
在Visual Studio 2012RC中,有一些非标准扩展.例如,此代码编译:
#include <string>
using namespace std;
void value(string& value)
{
value = "some";
}
int main()
{
value(string("nice"));
}
Run Code Online (Sandbox Code Playgroud)
并警告它是非标准扩展名.所以,我想了解它是如何实现的以及代码如何转换(使用const_cast进行rvalue-reference或const引用)?
类类型的临时对象仍然是对象.它存在于内存中的某个位置,这意味着编译器中没有任何异常可以附加对它的引用.在物理层面,无论是const引用还是非const引用都没有区别.换句话说,在语言限制纯粹是概念性的,人为的情况下.编译器只是忽略了这个限制.这里没有必要"改造"任何东西.引用只是直接附加到对象,无论该对象碰巧驻留在何处.
基本上,对于为外部单词提供对其this
指针值的访问(或使用左值访问*this
)的类,可以立即轻松地模拟行为
struct S {
S& get_lvalue() { return *this; }
};
void foo(S& s);
...
foo(S().get_lvalue());
Run Code Online (Sandbox Code Playgroud)
上述代码完全合法,它适用于上述限制.您可以将MSVC++行为视为与此等效.
归档时间: |
|
查看次数: |
3678 次 |
最近记录: |