2

以下代码使用 VC++ Nov 2012 CTP 编译。

#include <iostream>

using namespace std;

struct A
{
    A(int n)
    {
        cout << n << endl;
    }
};

void f(A)
{}

int main()
{
    A {8}; // OK. A::A(8); is called;

    cout << typeid(decltype(A {8})).name() << endl; // Output 'struct A'

    f(A {8}); // error C2275: 'A' : illegal use of this type as an expression    
}

Q1:为什么是 f(A {8});不合法?

Q2:为什么 A {8} 不被视为 A 的实例?

更新:

这个问题似乎是 VC++ Nov 2012 CTP 的一个错误。

4

1 回答 1

0

{8} 是一个带有扩展初始化列表的声明。你不能在 C++11 之前使用扩展初始化列表。但是您可以只调用构造函数。

使用 C++11,您的代码是正确的。

于 2013-02-17T11:13:05.800 回答