指针分配的功能地址显示与功能地址不同的值

时间:2017-10-06 18:54:14

标签: c++

我有一个功能,比如说

void *test_pointer = (void*) &myfunc;

如果我声明一个指针并将其分配给函数的地址如下

Name                       Value
&myfunc                    0x000000013fc06570
test_pointer               0x000000013fa4786f

并使用Visual Studio进入调试模式,我将从观察窗口中获取以下内容

class MyClass {
    public foo = 'asdf';
}

现在我希望这两个值相同,为什么不是这样?

1 个答案:

答案 0 :(得分:8)

严格地说,C ++标准不需要实现来支持将函数指针转换为不透明对象指针(void*)。你可能已经被告知void*可以指向任何东西,但“任何东西”不一定是函数。

由于此功能仅受条件支持,因此无法确定如何进行此类转换。可能是您的实现只会在保留值(这是标准所要求的最低要求)的同时转换为void*和从 <!DOCTYPE html> <html ng-app="plunker"> <head> <meta charset="utf-8" /> <title>AngularJS Plunker</title> <script>document.write('<base href="' + document.location + '" />');</script> <link rel="stylesheet" href="style.css" /> <script data-require="angular.js@1.5.x" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.11/angular.min.js" data-semver="1.5.11"></script> <script src="app.js"></script> </head> <body ng-controller="MainCtrl"> <div class="col-md-3"> {{formatList | json}} <select class="form-control" ng-model="formatList" ng-options="item as item.fileFormat for item in (listsFormat | filter:exportMode|filter:listName|filter:fileExtension) track by item.fileFormat"> </select> </div> <div class="col-md-3"> <select class="form-control" ng-model="exportMode" ng-options="item as item.exportMode for item in (listsExportMode| filter:formatList|filter:listName|filter:fileExtension) track by item.exportMode"></select> </div> <div class="col-md-3"> <select class="form-control" ng-model="listName" ng-options="item.list.listId as item.list.listName for item in (listsName| filter:formatList|filter:listName|filter:fileExtension) track by item.list.listName"></select> </div> <div class="col-md-3"> <select class="form-control" ng-model="fileExtension" ng-options="item as item.fileExtension for item in (listsFileExtension| filter:formatList|filter:listName|filter:fileExtension) track by item.fileExtension"></select> </div> </body> </html> 转换。但是两个指针表示中的值不一定相同。

引用最新的C ++标准草案,[expr.reinterpret.cast]/8

  

将函数指针转换为对象指针类型,反之亦然   有条件支持。这种转换的意义是   实现定义,但实现支持   双向转换,将一种类型的prvalue转换为   另一种类型和背面,可能具有不同的cv资格,   将产生原始指针值。