作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
以下代码使用 VC++ 2012 年 11 月 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});不合法?
问题 2:为什么 A {8} 不被视为 A 的实例?
更新:
这个问题似乎是 VC++ Nov 2012 CTP 的一个错误。
最佳答案
{8} 是一个带有扩展初始化列表的声明。在 C++11 之前,您不能使用扩展的初始化列表。但您可以改为调用构造函数。
对于 C++11,您的代码是正确的。
关于c++ - 为什么用 A{8} 初始化的对象不能作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14920351/
我是一名优秀的程序员,十分优秀!