定义静态constexpr自动类变量
Defining static constexpr auto class variable
由于引用未定义,以下代码链接失败:
// file.h
struct S {
static constexpr auto x = 0;
};
// file.cpp
int main() {
auto const & ref = S::x;
}
遵循C++11 'auto'关键字工作的静态成员?
// file.h
struct S {
static constexpr auto x = 0;
};
// file.cpp
constexpr decltype(S::x) S::x;
int main() {
auto const & ref = S::x;
}
它实际上是有效的c++吗?这似乎违反了函数遵循的"auto无处不在或无处不在"的规则(您可以向前声明一个返回auto的函数,然后将其定义为返回auto,但您不能将auto与非auto混合使用)。
auto
类型说明符服务于两个相关但独立的目的
[dcl.spec。/1
auto
和decltype(auto)
类型说明符s用于指定一个占位符类型,稍后将由演绎替换从初始化器。auto
类型说明符也用于引入具有尾随返回类型或to的函数类型表示一个lambda是一个泛型lambda。
在静态成员的情况下,类型由初始化器决定,因此x
在其声明的末尾已经具有int
类型。
[dcl.spec。/4
使用
auto
或decltype(auto)
声明的变量的类型是
你提到的规则只适用于函数和函数模板,与声明变量时使用auto
无关。
[dcl.spec。Auto]/13
函数或函数模板的重声明或特化使用占位符类型声明的返回类型使用该占位符,而不是推导出的类型。
相关文章:
- 查找后更改类变量
- 如何避免在仅标头库中C++类/变量重定义
- c++ 在非类函数中使用类变量
- 基于模板的类变量
- 分段 访问私有类变量时出错
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- 如何访问基类向量中的子类变量?(对于实体组件系统)
- 模板类变量作为非模板类的成员
- C++11 - 获取编译时的所有类变量,并在没有 Boost 的情况下为它们调用方法
- 如何在构造函数中访问类变量以分配它们,而无需在C++中使用此指针
- 类变量无法从类方法访问
- 指针作为类变量 Qt
- 为什么线程对类变量所做的更改没有影响?
- memcpy() 在一个类中被调用以复制到另一个类变量中后会引发异常
- C++:使用基类中的仅派生类变量
- 类、constexpr 构造函数和 std::string
- 从静态成员函数访问私有非静态类变量 - C++
- 静态类变量的多重定义
- 使用 WindowSetup 类变量获取错误
- 定义静态constexpr自动类变量