C++ C++;变量声明被视为函数声明

C++ C++;变量声明被视为函数声明,c++,visual-c++,C++,Visual C++,这个问题相当理论化,但有趣的是,是什么让MS VS2010将以下变量声明(在main中)视为函数声明: typedef std::shared_ptr<asymm::PrivateKey> PrivateKeyPtr; ... void main() { ... maidsafe::dht::PrivateKeyPtr pk(); // I'm trying to init variable here, though it thinks it's function

这个问题相当理论化,但有趣的是,是什么让MS VS2010将以下变量声明(在
main
中)视为函数声明:

typedef std::shared_ptr<asymm::PrivateKey> PrivateKeyPtr;

...
void main()
{
    ...
    maidsafe::dht::PrivateKeyPtr pk(); // I'm trying to init variable here, though it thinks it's function declaration

    kNode->node()->Store(key, value, "", ttl, pk, std::bind(&StoreCallback, args::_1, key, ttl));
}
以下几句话很有魅力:

maidsafe::dht::PrivateKeyPtr pk = maidsafe::dht::PrivateKeyPtr();

kNode->node()->Store(key, value, "", ttl, pk, std::bind(&StoreCallback, args::_1, key, ttl));

声明它时不带
()

不幸的是,对于提供未初始化值的基元类型,但在C++11中,可以使用
{}
初始化值:

maidsafe::dht::PrivateKeyPtr pk{};

有关相关的解析问题,请参见。

在不使用
()
的情况下声明它:

不幸的是,对于提供未初始化值的基元类型,但在C++11中,可以使用
{}
初始化值:

maidsafe::dht::PrivateKeyPtr pk{};
有关相关的解析问题,请参阅

maidsafe::dht::PrivateKeyPtr pk{};