相关疑难解决方法(0)

未命名/匿名命名空间与静态函数

C++的一个特性是能够创建未命名(匿名)命名空间,如下所示:

namespace {
    int cannotAccessOutsideThisFile() { ... }
} // namespace
Run Code Online (Sandbox Code Playgroud)

您会认为这样的功能是无用的 - 因为您无法指定命名空间的名称,所以无法从外部访问其中的任何内容.但是这些未命名命名空间可以在它们创建的文件访问,就好像你有一个隐含的using子句.

我的问题是,为什么或何时使用静态函数会更好?或者他们基本上是两种做同样事情的方式?

c++ namespaces

486
推荐指数
8
解决办法
20万
查看次数

什么是"静态"功能?

问题是关于普通函数,而不是 static方法,正如评论中所阐明的那样.

好的,我理解static变量是什么,但什么是static函数?

为什么如果我声明一个函数,让我们说void print_matrix,让我们说a.c(WITHOUT a.h)和include "a.c"- 我得到"print_matrix@@....) already defined in a.obj",但是如果我声明它static void print_matrix然后它编译?

更新只是为了清理 - 我知道包括.c很糟糕,正如你们许多人指出的那样.我只是做它在暂时清除空间main.c,直到我有更好的想法如何将所有这些功能集成到适当.h.c文件.只是一个临时的快速解决方案.

c static terminology function

465
推荐指数
11
解决办法
55万
查看次数

为什么一个未命名的命名空间是静态的"优越"替代品?

C++标准中的$ 7.3.1.1/2节描述如下:

在声明命名空间作用域中的对象时,不推荐使用static关键字; unnamed-namespace提供了一个更好的选择.

我不明白为什么一个未命名的命名空间被认为是一个更好的选择?理由是什么?我已经知道标准的内容很长一段时间,但我从未认真考虑过,即使我回答这个问题:未命名的命名空间优于静态?

它是否被认为是优越的,因为它也可以应用于用户定义的类型,正如我在回答中所描述的那样?还是有其他原因,我不知道?我问这个问题,特别是因为这是我在答案中的推理,而标准可能会考虑其他因素.

c++ standards iso namespaces

86
推荐指数
3
解决办法
3万
查看次数

弃用静态关键字...不再?

在C++中,可以static在翻译单元中使用关键字来影响符号的可见性(变量或函数声明).

在n3092,这被弃用了:

附件D.2 [depr.static]
在命名空间范围内声明对象时,不推荐使用static关键字(见3.3.6).

在n3225中,这已被删除.

我能找到唯一一篇文章有些不正式.

它确实强调,为了与C兼容(以及将C程序编译为C++的能力),弃用令人讨厌.但是,直接将C程序编译为C++本身就是一种令人沮丧的经历,所以我不确定它是否值得考虑.

有谁知道为什么它被改变了?

c++ standards static c++11

84
推荐指数
3
解决办法
2万
查看次数

在C++中使用未命名的命名空间

何时在C++中使用未命名的命名空间?在任何意义上它比独立功能更好吗?是否应该仅在源文件中使用而不在头文件中使用?

c++ namespaces

68
推荐指数
3
解决办法
3万
查看次数

根据标准委员会的说法,为什么匿名命名空间不能完全替代namespace-static?

根据这个答案,命名空间范围的静态变量在C++ 11中是未被完美的.也就是说,它们在C++ 03中被弃用,因为匿名命名空间被认为更好.但是C++ 11对它们不予重视.

为什么?N3296将其原因列为:

不应该弃用在命名空间范围中使用静态.匿名命名空间不足以替代该功能.

这显然是委员会接受的.为什么?什么是匿名命名空间不完全取代此功能?

我更喜欢那些有标准委员会讨论的文件或书面记录的答案.

c++ c++11

50
推荐指数
3
解决办法
8686
查看次数

"静态枚举"在C++中意味着什么?

我最近遇到过这个:

static enum Response{
    NO_ERROR=0,
    MISSING_DESCRIPTOR,
    ...
};
Run Code Online (Sandbox Code Playgroud)

它在Microsoft VS2005下编译和工作.但是,我不确定'静态'修饰符应该做什么.它与以下有何不同?

enum Response {
    NO_ERROR=0,
    MISSING_DESCRIPTOR,
    ...
};
Run Code Online (Sandbox Code Playgroud)

c++ enums static visual-studio

32
推荐指数
3
解决办法
4万
查看次数

static关键字在命名空间范围内没用吗?

namespace N
{
   static int x = 5;
}
Run Code Online (Sandbox Code Playgroud)

在命名空间范围内声明拥有静态变量的重要性/用例是什么?

c++ static scope namespaces

22
推荐指数
2
解决办法
2万
查看次数

在全局范围内使用静态变量和函数

标记变量是否有用static,当它位于.cpp文件的全局范围内时,不在函数中?

你也可以将static关键字用于函数吗?如果是的话,它们的用途是什么?

c++ static global global-variables static-variables

21
推荐指数
2
解决办法
2万
查看次数

对静态成员进行未定义的引用意味着什么?

我刚刚写了一个包含一些静态数据成员的类,但现在我收到有关"未定义引用"的错误.为什么这不起作用?我究竟做错了什么?

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)

c++ c++-faq

18
推荐指数
2
解决办法
8779
查看次数