首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在哪里可以在C++中声明变量?

在哪里可以在C++中声明变量?
EN

Stack Overflow用户
提问于 2013-01-03 22:03:45
回答 2查看 269关注 0票数 2

我正在阅读C++常见问题。在第16章中,使用静态它说:

const静态数据成员在类中声明,通常在源文件(如.cpp文件)中定义(并初始化)。但在某些情况下,它可以在类体本身中初始化。

然后继续提到可以声明积分和非整数类型的地方(尽管我认为C++11中的积分改变了这种情况)。

我的问题是,上述内容是否仅适用于const静态数据成员,而不适用于非const静态数据成员?

我开始感到很困惑,不明白为什么会有这些限制?这些规则是否适用于易失性、可变和其他关键字变量?一个人怎么能很容易地学会这一点(除了24/7编程)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-03 22:11:05

C++ 2011并没有改变任何关于声明变量的内容!但是,可以初始化类定义正文中的所有成员变量。在构造对象时,类定义中声明的值是默认使用的值。但是,如果成员初始化程序列表提到成员,则初始化程序列表优先。

静态数据成员通常需要定义。但是,staticconst成员可以在类主体中进行声明和初始化:如果成员没有绑定到引用或其地址,则声明就足够了,您不需要提供定义。然而,如果您使用的地址,它仍然需要定义。

以下是如何设置成员初始化的默认值的几个示例:

代码语言:javascript
运行
复制
class foo
{
private:
    int i{5};
    int j = 6;
    std::vector<int> v{ 1, 2, 3, 4 };
    std::vector<int> w = std::vector<int>(2, 10);
    std::vector<int> z = decltype(z)(2, 10);

    // ...
};

注意,使用括号不起作用。因此,可能有必要使用上述最后两种形式之一。

票数 3
EN

Stack Overflow用户

发布于 2013-01-03 22:07:47

一般的推理是,如果需要存储,则必须在源文件中定义它。如果它是一个静态的const整数,它不需要存储-编译器可以在任何地方使用这个变量替换一个文字整数。如果它是非静态的,它是一个成员变量,需要存储在每个对象中。如果是非const,则需要在更新时保留值的位置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14147994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档