相关疑难解决方法(0)

在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 extern?

是否可以声明一个变量extern constexpr并在另一个文件中定义它?

我试了但是编译器给出了错误:

constexpr变量' i'的声明不是定义

在.h:

extern constexpr int i;
Run Code Online (Sandbox Code Playgroud)

在.cpp中:

constexpr int i = 10; 
Run Code Online (Sandbox Code Playgroud)

c++ extern constexpr

39
推荐指数
3
解决办法
9837
查看次数

C和C++中的静态和外部全局变量

我做了2个项目,第一个用C语言,第二个用C++编写,两个项目都有相同的行为.

C项目:

header.h

int varGlobal=7;
Run Code Online (Sandbox Code Playgroud)

main.c中

#include <stdio.h>
#include <stdlib.h>
#include "header.h"

void function(int i)
{
    static int a=0;
    a++;
    int t=i;
    i=varGlobal;
    varGlobal=t;
    printf("Call #%d:\ni=%d\nvarGlobal=%d\n\n",a,i,varGlobal,t);
}

int main() {
    function(4);
    function(6);
    function(12);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

C++项目:

header.h

int varGlobal=7;
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include <iostream>
#include "header.h"
using namespace std;

void function(int i)
{
    static int a=0;
    int t=i;
    a++;
    i=varGlobal;
    varGlobal=t;
    cout<<"Call #"<<a<<":"<<endl<<"i="<<i<<endl<<"varGlobal="<<varGlobal<<endl<<endl; 
}

int main() {
    function(4);
    function(6);
    function(12);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我读到默认情况下全局变量是extern,在C++中默认是C和static ; 那么为什么C++代码有效呢?

我的意思是int …

c c++ static global-variables extern

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

默认情况下全局变量是extern还是等于在全局中使用extern声明变量?

我经历了两个问题,

C和C++中的静态和外部全局变量

C中的全局变量是静态的还是不是?

这两个问题以不同的方式说明了这两件事.

问题1的答案: extern

问题2的答案: extern

我需要知道以下内容.

  1. 默认情况下,全局变量是extern在链接(或)中它等同于通过指定extern存储类来声明变量吗?

2.默认情况下,全局变量在范围(或)中是静态的,它等同于通过指定静态存储类来声明变量吗?

3.如果有任何c或c ++差异请澄清?

c c++ static global extern

11
推荐指数
2
解决办法
2853
查看次数

用C++ 1z定义全局常量?

C++ 1z中声明内存有效全局常量的最佳方法是什么,它不进行内部链接,因此在所有翻译单元中使用单个副本?

尽管在许多地方已经提到过,但我们没有任何单一的"最佳方法"问题和答案,所以在这里.以下是我找到相关问题的部分地方列表.

我在找为atleast所有基本基本类型的解决方案,如int,double,char,std::string.

编辑1: 最好的方式,我的意思是"记忆效率".我知道对于内部联系,每个翻译单元都会有多个副本,因此会占用内存.除此之外,如果我们能够实现快速的执行时间和编译时间,这将是伟大的,代码的美化(容易)并不重要.此外,我知道外部链接将增加获取时间,因为处理器可能会在运行时获得缓存未命中.但最新的C++语言是否支持所有这些的最佳方法?或者可能建议支持每个案例?

注意:对于std::string全局常量,最佳方法是什么?是否存在可变性会对有任何影响常量性

c++ constants c++17

9
推荐指数
2
解决办法
2374
查看次数

将静态全局变量声明为内联有任何意义吗?

考虑一下,在头文件中声明了全局变量(不是静态类成员!):

inline static int i{};
Run Code Online (Sandbox Code Playgroud)

对于我测试过的几个编译器来说,它是有效的构造,并且实验证明,尽管也将其声明为内联的,但它们将在不同的转换单元中创建多个不同的对象(这意味着该变量中仅一个实例必须存在于程序中)。那么,static关键字比inline在这种情况下具有更高的优先级吗?

c++ static global inline c++17

8
推荐指数
1
解决办法
98
查看次数

标签 统计

c++ ×6

extern ×3

static ×3

c ×2

c++17 ×2

global ×2

constants ×1

constexpr ×1

global-variables ×1

inline ×1