相关疑难解决方法(0)

什么是外部联系和内部联系?

我想了解外部联系和内部联系及其区别.

我也想知道的意思

const默认情况下,变量内部链接,除非另有声明extern.

c++ c++-faq

318
推荐指数
8
解决办法
12万
查看次数

全球变量是否不好?

在C/C++中,全局变量和我的教授认为的一样糟糕吗?

c c++ global-variables

233
推荐指数
20
解决办法
10万
查看次数

什么是C++中的"翻译单元"

我正在阅读Meyers编写的"Effective C++",并且遇到了"翻译单元"一词.

有人可以给我一个解释:

1)究竟是什么

2)在使用C++编程时,我应该何时考虑使用它

3)如果它只与C++有关,或者它可以与其他编程语言一起使用

我可能已经在不知道术语的情况下使用它了....

c++

221
推荐指数
6
解决办法
6万
查看次数

在C++中定义全局常量

我想在C++中定义一个常量,以便在几个源文件中可见.我可以想象以下方法在头文件中定义它:

  1. #define GLOBAL_CONST_VAR 0xFF
  2. int GLOBAL_CONST_VAR = 0xFF;
  3. 一些功能可以恢复价值(例如int get_GLOBAL_CONST_VAR())
  4. enum { GLOBAL_CONST_VAR = 0xFF; }
  5. const int GLOBAL_CONST_VAR = 0xFF;
  6. extern const int GLOBAL_CONST_VAR; 并在一个源文件中 const int GLOBAL_CONST_VAR = 0xFF;

选项(1) - 绝对不是您想要使用的选项

选项(2) - 使用头文件在每个目标文件中定义变量的实例

选项(3) - 在大多数情况下,IMO过度杀戮

选项(4) - 在许多情况下可能不好,因为枚举没有具体类型(C++ 0X将增加定义类型的可能性)

所以在大多数情况下我需要在(5)和(6)之间进行选择.我的问题:

  1. 你更喜欢(5)或(6)?
  2. 为什么(5)没问题,而(2)不是?

c++

75
推荐指数
7
解决办法
9万
查看次数

constexpr头文件中的全局常量和odr

不幸的是,我有点困惑constexpr,在头文件中声明的全局常量和odr.

简而言之:我们可以从这里结束

https://isocpp.org/files/papers/n4147.pdf

constexpr MyClass const MyClassObj () { return MyClass {}; }
constexpr char const * Hello () { return "Hello"; }
Run Code Online (Sandbox Code Playgroud)

比...好

constexpr MyClass const kMyClassObj = MyClass {};
constexpr char const * kHello = "Hello";
Run Code Online (Sandbox Code Playgroud)

如果我想"只使用"那些全局声明/定义的实体并且不想考虑我如何使用它们,那么在头文件中定义全局变量?

c++ linkage language-lawyer constexpr c++11

19
推荐指数
1
解决办法
7252
查看次数

C++中的全局常量11

在C++中声明和定义全局常量的最佳方法是什么?我最感兴趣的是C++ 11标准,因为它在这方面做了很多修复.

[编辑(澄清)]:在这个问题中,"全局常量"表示在编译时在任何范围内已知的常量变量或函数.必须可以从多个翻译单元访问全局常量.它不一定是constexpr风格不变-可以是这样const std::map<int, std::string> m = { { 1, "U" }, { 5, "V" } };const std::map<int, std::string> * mAddr() { return & m; }.在这个问题中,我没有触及优选的好的范围或常数名称.让我们把这些问题留给另一个问题.[END_EDIT]

我想知道所有不同情况的答案,所以让我们假设这T是以下之一:

typedef    int                     T;  // 1
typedef    long double             T;  // 2
typedef    std::array<char, 1>     T;  // 3
typedef    std::array<long, 1000>  T;  // 4
typedef    std::string             T;  // 5
typedef    QString                 T;  // 6
class      T {
   // unspecified amount of code
};                                     // 7
// …
Run Code Online (Sandbox Code Playgroud)

c++ const constexpr c++11

17
推荐指数
1
解决办法
7252
查看次数

在C++中使全局"常量"的正确方法

通常,我定义一个真正的全局常量(比方说,pi)的方法是在头文件中放置一个extern const,并在.cpp文件中定义常量:

constants.h:

extern const pi;
Run Code Online (Sandbox Code Playgroud)

constants.cpp:

#include "constants.h"
#include <cmath>
const pi=std::acos(-1.0);
Run Code Online (Sandbox Code Playgroud)

这适用于像pi这样的真常量.但是,我正在寻找一个最佳实践来定义一个"常量",因为它将从程序运行到程序运行保持不变,但可能会根据输入文件而改变.这方面的一个例子是引力常数,它取决于所用的单位.g在输入文件中定义,我希望它是任何对象都可以使用的全局值.我总是听说使用非常量全局变量是不好的做法,因此目前我已将其存储在系统对象中,然后将其传递给它生成的所有对象.然而,随着对象数量的增长,这似乎有点笨拙且难以维护.

思考?

c++ variables

7
推荐指数
1
解决办法
3140
查看次数

使用static,const,constexpr进行全局声明/初始化

在C++或C++ 11中,对于以下声明//初始化,

// global scope
const int a = 1; // line 1
static const int b = 2; // line 2
constexpr int c = 3;  // line 3
static constexpr int d = 4; // line 4
constexpr int e = a + b + c*d; // line 5
static constexpr int f = a - b - c*d; // line 6
Run Code Online (Sandbox Code Playgroud)

这个问题说在文件范围内,C++中第1行和第2行之间没有区别.3号线和4号线怎么样?

4号线和5号线之间是否存在差异?

5号线和6号线之间有区别吗?

c++ c++11

5
推荐指数
1
解决办法
2435
查看次数

c ++全局常量问题

我们在一系列文件中定义了这些"实用程序"常量集.问题来自TOO MANY文件包含这些全局常量文件的事实,如果我们向其中一个文件添加常量并尝试构建,它会构建整个库,这需要一个多小时.

任何人都可以为这种方法提出更好的方法吗?非常感谢.

c++ constants

3
推荐指数
1
解决办法
607
查看次数

全局变量 - 何时使用 static、inline、extern、const 和 constexpr

有很多与 C++ 全局变量相关的问题和答案,例如:

它们都包含一些小信息片段,例如inline变量在 C++17 中具体如何工作等。其中一些还没有很好地老化,因为 C++17 通过引入inline变量从根本上改变了规则。

C++20 还引入了模块和模块链接,这再次使得 StackOverflow 上的大多数内容过时,甚至过时。

本问答旨在统一这些问题,并为读者提供考虑这些版本更改的概述。

问题

  • 何时使用staticinlineexternconstconstexpr作为全局变量?
  • 历史上答案如何变化(C++17 之前/之后,C++20 之前/之后)?
  • 答案如何根据全局变量所在的位置(标头/源/模块)而变化?

c++ constants global-variables c++-faq linkage

2
推荐指数
1
解决办法
681
查看次数