相关疑难解决方法(0)

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

static在C代码中看到了不同地方使用的单词; 这就像C#中的静态函数/类(其中实现是跨对象共享的)?

c syntax static

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

如何使用extern在源文件之间共享变量?

我知道C中的全局变量有时会有extern关键字.什么是extern变量?宣言是什么样的?它的范围是什么?

这与跨源文件共享变量有关,但这是如何工作的?我在哪里用extern

c global-variables extern

942
推荐指数
13
解决办法
67万
查看次数

C++函数中静态变量的生命周期是多少?

如果变量声明为static在函数的作用域中,则仅初始化一次并在函数调用之间保留其值.它的生命到底是什么?它的构造函数和析构函数何时被调用?

void foo() 
{ 
    static string plonk = "When will I die?";
}
Run Code Online (Sandbox Code Playgroud)

c++ static lifetime

359
推荐指数
4
解决办法
17万
查看次数

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

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

有人可以给我一个解释:

1)究竟是什么

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

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

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

c++

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

静态变量存储在C和C++中的哪个位置?

在可执行文件的哪个段(.BSS,.DATA,其他)中存储了静态变量,以便它们没有名称冲突?例如:


foo.c:                         bar.c:
static int foo = 1;            static int foo = 10;
void fooTest() {               void barTest() {
  static int bar = 2;            static int bar = 20;
  foo++;                         foo++;
  bar++;                         bar++;
  printf("%d,%d", foo, bar);     printf("%d, %d", foo, bar);
}                              }
Run Code Online (Sandbox Code Playgroud)

如果我编译两个文件并将其链接到重复调用fooTest()和barTest的main,则printf语句将独立增加.有意义,因为foo和bar变量是翻译单元的本地变量.

但是存储分配在哪里?

需要明确的是,假设您有一个工具链可以输出ELF格式的文件.因此,我相信,有将一些空间,对于那些静态变量的可执行文件保留.
出于讨论目的,我们假设我们使用GCC工具链.

c c++ compiler-construction

169
推荐指数
10
解决办法
18万
查看次数

`static const` vs`const`的C++语义

特别是在C++中,例如:语义差异是什么:

static const int x = 0 ;
Run Code Online (Sandbox Code Playgroud)

const int x = 0 ;
Run Code Online (Sandbox Code Playgroud)

两者static作为键和存储类说明(即内部和功能外).

c++

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

内联变量如何工作?

在2016年奥卢ISO C++标准会议上,一项名为Inline Variables的提案被标准委员会投票选为C++ 17.

通俗地说,什么是内联变量,它们如何工作以及它们对什么有用?如何声明,定义和使用内联变量?

c++ c++17

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

constexpr是否意味着内联?

考虑以下内联函数:

// Inline specifier version
#include<iostream>
#include<cstdlib>

inline int f(const int x);

inline int f(const int x)
{
    return 2*x;
}

int main(int argc, char* argv[])
{
    return f(std::atoi(argv[1]));
}
Run Code Online (Sandbox Code Playgroud)

和constexpr等效版本:

// Constexpr specifier version
#include<iostream>
#include<cstdlib>

constexpr int f(const int x);

constexpr int f(const int x)
{
    return 2*x;
}

int main(int argc, char* argv[])
{
    return f(std::atoi(argv[1]));
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:说明constexpr符是否意味着说明inline符,如果一个非常量参数传递给一个constexpr函数,编译器将尝试inline该函数,就像说明inline符被放入其声明一样?

C++ 11标准能保证吗?

c++ inline standards-compliance constexpr c++11

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

头文件中的变量声明 - 静态与否?

当重构一些时,#defines我遇到了类似于C++头文件中的以下声明:

static const unsigned int VAL = 42;
const unsigned int ANOTHER_VAL = 37;
Run Code Online (Sandbox Code Playgroud)

问题是,静态会产生什么不同,如果有的话?请注意,由于经典#ifndef HEADER #define HEADER #endif技巧(如果重要),不可能多次包含标题.

VAL如果标题包含在多个源文件中,静态是否只创建了一个副本?

c c++ static

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

C++头文件如何包含实现?

好吧,无论如何不是C/C++专家,但我认为头文件的目的是声明函数,然后C/CPP文件来定义实现.

但是,今晚回顾一些C++代码,我发现这是在类的头文件中...

public:
    UInt32 GetNumberChannels() const { return _numberChannels; } // <-- Huh??

private:
    UInt32 _numberChannels;
Run Code Online (Sandbox Code Playgroud)

那么为什么标题中有实现呢?是否与const关键字有关?这是内联类方法吗?与定义CPP文件中的实现相比,这样做的好处/意义究竟是什么?

c++ header-files

59
推荐指数
4
解决办法
8万
查看次数