使用decltype访问静态字段
Accessing static fields by using decltype
可能重复:
C++0x decltype和作用域解析运算符
使用g++4.6.1:编译下一个示例
#include <iostream>
struct A
{
static const int v = 1;
};
int main()
{
A a;
std::cout << decltype(a)::v << std::endl;
}
将产生下一个编译错误:
error: expected primary-expression before 'decltype'
error: expected ';' before 'decltype'
这符合标准吗?或者,这是g++的怪癖吗?
编译器似乎无法识别decltype
关键字。
G++4.6.1足够新,可以包含decltype
关键字。您是否使用-std=gnu++0x
或-std=c++0x
启用了C++11模式?
C++语法允许decltype说明符出现在限定id中的::
之前,因此代码将被合格的编译器接受。错误消息是错误的,decltype(a)::v
是有效的限定id,它是主表达式。
作为一种变通方法,您可以使用typedef。示例:http://ideone.com/clone/7FKUJ
它是标准的,或者至少,它肯定是。我相信有一份关于这一点的DR文件,它可能在最终标准中得到了修复,但可能会在下一个标准中得到修复。很简单,decltype
在::
之前不是有效的语法产物。
相关文章:
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 如何正确实例化静态字段 tat 是另一个类对象
- 动态分配对象中的字段-动态分配更好还是静态分配更好?C++
- C++ 每个派生类的分隔静态字段
- uninit_member:非静态类成员字段 m_cJobState.bstatus 未在此构造函数中初始化,也不在其调
- 访问另一个类(系统)的非静态字段,就好像它是我自己的字段一样 - 优雅地
- 使用静态方法初始化 const 类字段的做法是好是坏
- 使用静态类成员而不是私有字段之间的速度差异是什么?
- 类内非静态字段初始化 + 对象池 - >降低可维护性/可读性
- 在模板专业化期间,如何设置C 结构中的静态字段
- 初始化静态字段
- 定义静态类字段时多个已定义符号的链接器错误
- 从测试程序访问共享库中具有静态私有字段的类
- 自动复制=按值并支持多态性的适当类型的非静态字段
- 动态链接到 c++ 静态成员字段时符号查找失败
- 类类型的静态constexpr字段在g++中给出链接时间错误
- 在抽象类中,可以使用抽象类A的类型创建一个静态字段
- 使2个非静态字段(即动态数组)相互接近使用内存
- C :初始化成员结构的静态字段的正确方法
- 在C++实例中,字段不会初始化为其默认值.静态字段怎么样