3
我有我正在玩的以下代碼。我有一個局部變量p
,我必須打印出其地址拉姆達:本地變量的內存地址根據lambda參數的變化而變化
int main()
{
int p = 0;
auto lambda = [&p] {
std::cout << &p << std::endl;
};
lambda(); // 0x7fff78e6b7e0
}
變量的地址是相同的,無論多少次,我運行的代碼。但我發現,當我改變拉姆達定義是:
auto lambda = [&p]() {
// ^^
含義,當我添加一個空的參數列表,我得到一個新的地址:
lambda(); // 0x7fff2291a260
你可以測試一下over here。爲什麼會發生?我在Windows上使用g ++ - 4.8和clang ++運行我的代碼。
我的大譁++ - 3.2.1給出了不同的* *地址時,我多次運行代碼。 – dyp
爲什麼你打擾一個局部變量的地址? – Geoffroy
我最近的本地clang ++ 3.4中繼191142在多次運行時也顯示不同的地址(32位)。 – dyp