热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

const参考函数参数的地址何时是唯一的?

如何解决《const参考函数参数的地址何时是唯一的?》经验,为你挑选了1个好方法。

在下面的示例代码中,我想知道两次调用log_cref_address何时可靠地打印相同的地址.

#include 
#include 
#include 

using namespace std;

void log_cref_address(const int& t) {
    cout <
void foo() {
    log_cref_address(i); // different if foo called from different threads
    thread([] { log_cref_address(i); }).join(); // same if already in thread
    thread(log_cref_address, i).join(); // same if already in thread
    cout <: "; foo<0>(); 
    cout <<"foo<0>: "; foo<0>();
    cout <<"foo<1>: "; foo<1>();
    cout <(); }).join();
    cout <<"bind(): "; thread(bind(foo<0>)).join();
    return 0;
}

在我的机器上,main打印

foo<0>: 0x7fff7cf5507c 0x7fa0585b5e1c 0x196fc28 
foo<0>: 0x7fff7cf5507c 0x7fa0585b5e1c 0x196fc28 
foo<1>: 0x7fff7cf5507c 0x7fa0585b5e1c 0x196fc28 

lambda: 0x7fa0585b5dcc 0x7fa057db4e1c 0x7fa0500008c8 
bind(): 0x7fa0585b5d1c 0x7fa057db4e1c 0x7fa0500008c8

从这样的许多输出中,我观察到的main行为如下:

    前三个调用foo打印相同的地址.

    最后两次调用foo(来自线程)打印的地址不是前三次调用打印的.

    在最后两次调用中foo,log_cref_address当且仅当从子线程调用时才打印相同的地址.

在任何机器上,C++标准都保证了哪些(如果有的话)这些行为?



1> geza..:

他们都不是.该标准不保证临时变量的地址.


推荐阅读
author-avatar
mobiledu2502902687
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有