为什么用A{8}初始化的对象不能作为参数传递
Why can an object initialized with A{8} not be passed as an argument?
以下代码是用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});不合法?
Q2:为什么A{8}不被视为A的实例?
更新:
这个问题似乎是VC++2012年11月CTP的一个错误
A{8}是一个带有扩展初始值设定项列表的声明。在C++11之前不能使用扩展的初始值设定项列表。但是您可以直接调用构造函数。
使用C++11,您的代码是正确的。
相关文章:
- 为什么模板类中的对象不能返回值
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 如果'C'公开继承'B',B 私下继承'A',为什么我不能在"C"中创建"A"的对象?
- 为什么我不能在主函数之外定义一个类的对象(它继承了另一个类)?
- 为什么我不能引用指向实例化对象的函数的指针?
- Visual Studio 2017 C++,不能使用 typeid() 获取信息对象,缺少指针?;
- 为什么我在声明对象数组时不能使用 -> 运算符?
- 为什么带有指针子对象的文字类类型的 constexpr 表达式不能是非类型模板参数
- C++:返回本地对象,但不能正常工作
- 如果普通默认构造函数不执行任何操作,为什么我们不能使用 malloc 创建平凡可构造的对象?
- 我们不能在 c++ 中只有对象的变量吗?
- 为什么我不能更改实例化对象内部的向量?
- 为什么我不能在 c++ 中将对象插入到地图中
- 为什么我不能创建包含 vec3 对象的联合?
- 一个对象什么时候可以有非零大小的一个,但不能同时具有一个或多个字节的存储
- 流的奇怪问题.不能存储具有特定值的成员变量的对象
- 可变大小的对象不能被初始化混淆
- 使用按引用调用时,不能在没有对象的情况下调用成员函数 const
- 静态初始化的对象不能放在块中尝试