簡體   English   中英

Boost ::從指針使用時不為空

[英]Boost::any not empty when used from a pointer

我有以下測試應用程序:

#include <boost/any.hpp>
#include <iostream>

void check(boost::any y)
{
    if (y.empty())
        std::cout << "empty!\n";
    else
        std::cout << "Not empty, type: " << y.type().name() << "\n";
}

int main()
{
    boost::any boostAny;
    check(boostAny);

    boost::any* boostAny2 = &boostAny;
    check(boostAny2);

    boost::any* boostAny3 = new boost::any;
    check(boostAny3);
    delete(boostAny3);
}

我這樣編譯運行:

g++ -std=c++11 -o test test.cpp && ./test

輸出為:

empty!
Not empty, type: PN5boost3anyE
Not empty, type: PN5boost3anyE

我希望所有3個測試的輸出相同。 但事實並非如此。 為什么? 這是錯誤嗎? 嘗試增加1.54.0和1.55.0。

boostAny2是指向boost::any的指針。 您將其作為參數傳遞給check ,它需要一個boos::any ,因此將從boost::any*創建一個新的boost::any實例(即,值類型將為boost::any* )。 參考 https://www.boost.org/doc/libs/release/doc/html/boost/any.html

換句話說,實際發生的是(從概念上):

boost::any* boostAny2 = &boostAny;
boost::any param = boost::any(boostAny2); // contruct a new boost::any instance from the pointer boostAny2
check(param);

也許您的意思是:

check(*boostAny2);

同樣適用於boostAny3

您正在隱式構造any包含您提供的指針的對象,因此顯然它們不是空的。

您的密碼

check(boostAny3);

等效於此代碼

check(any(boostAny3));

我想你想要的是

check(*boostAny3);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM