相关疑难解决方法(0)

我应该何时为函数/方法编写关键字'inline'?

我应该何时inline在C++中为函数/方法编写关键字?

看到一些答案,一些相关的问题:

  • 我应该何时写在C++函数/方法关键字"内联"?

  • 什么时候编译器不知道何时使函数/方法'内联'?

  • 当一个应用程序为函数/方法写入"内联"时,是否多线程是否重要?

c++ inline one-definition-rule

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

为什么使用未命名的命名空间以及它们有什么好处?

我刚刚加入了一个新的C++软件项目,我正在尝试理解这个设计.该项目经常使用未命名的命名空间.例如,类定义文件中可能会出现这样的情况:

// newusertype.cc
namespace {
  const int SIZE_OF_ARRAY_X;
  const int SIZE_OF_ARRAY_Y;
  bool getState(userType*,otherUserType*);
}

newusertype::newusertype(...) {...
Run Code Online (Sandbox Code Playgroud)

可能导致使用未命名的命名空间的设计注意事项是什么?有哪些优点和缺点?

c++ oop namespaces

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

"const static"在C和C++中意味着什么?

const static int foo = 42;
Run Code Online (Sandbox Code Playgroud)

我在StackOverflow上的一些代码中看到了这个,我无法弄清楚它是做什么的.然后我在其他论坛上看到了一些困惑的答案.我最好的猜测是它在C中用来隐藏foo其他模块的常量.它是否正确?如果是这样,为什么有人会在C++上下文中使用它,你可以做到这一点private

c c++

111
推荐指数
7
解决办法
18万
查看次数

在.cpp文件中定义C++命名空间方法的正确方法

可能是重复的,但不是一个容易搜索的...

给出如下标题:

namespace ns1
{
 class MyClass
 {
  void method();
 };
}
Run Code Online (Sandbox Code Playgroud)

我看到method()在.cpp文件中以多种方式定义:

版本1:

namespace ns1
{
 void MyClass::method()
 {
  ...
 }
}
Run Code Online (Sandbox Code Playgroud)

版本2:

using namespace ns1;

void MyClass::method()
{
 ...
}
Run Code Online (Sandbox Code Playgroud)

版本3:

void ns1::MyClass::method()
{
 ...
}
Run Code Online (Sandbox Code Playgroud)

有没有'正确'的方法呢?这些都是"错误的",因为它们并不都意味着同样的事情吗?

c++ coding-style namespaces

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

为什么包含警卫不会阻止多个函数定义?

链接器报告重复的符号:

#ifndef testttt
#define testttt

void anything(){
    std::cout<<"hellooooooo";
}

#endif
Run Code Online (Sandbox Code Playgroud)

因为它在包含防护内部,所以我希望这个函数只定义一次.但显然不是.

我知道我可以把static它放在它前面然后它会工作(我仍然觉得具有讽刺意味,因为静态应该给它内部链接,但该函数可以从多个cpp文件中使用).

所以我想我的两部分问题是:1)为什么包含警戒不会阻止此功能的多个定义,就像它们对其他标题项一样,2)为什么这个static词在静态应该阻止名称可见时解决这个问题在其他翻译单位?我添加它,我实际上可以从包含此头文件的任何地方调用此函数.

c++

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

29
推荐指数
2
解决办法
9822
查看次数

C++常量的最佳实践

我有一大堆常量,我想在我的代码的不同部分访问,但我希望能够轻松访问整个:

static const bool doX = true;
static const bool doY = false;
static const int maxNumX = 5;
Run Code Online (Sandbox Code Playgroud)

等等

所以我创建了一个名为"constants.h"的文件,并将它们全部放在那里,并将#included包含在任何需要知道常量的文件中.

问题是,这对于编译时来说很糟糕,因为每次更改常量时,都必须重建constants.h引用的所有文件.(另外,据我所知,因为它们是静态的,所以每次在新的.cpp中包含constants.h时,我都会在代码中生成doX/doY/maxNumX的副本,导致在编译时浪费千字节的空间EXE - 有没有办法看到这个?).

所以,我想要一个解决方案.如果可能的话,不是"仅在使用它们的文件中声明常量".

有什么建议?

c++ constants

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

模板编译

我有可能是一个愚蠢的问题,但我只是不理解我的书对它的解释.

它说"当编译器看到模板的定义时,它不会生成代码.它只在我们实例化模板的特定实例时生成代码.事实上代码只在我们使用模板时生成(而不是在我们使用模板时生成定义它)影响我们组织源代码的方式以及何时检测到错误...要生成实例化,编译器需要具有定义函数模板或类模板成员函数的代码.因此,与非模板代码不同,模板的标题通常包括定义和声明."

"生成代码"究竟是什么意思?我想我从来没有真正考虑过编译器发生了什么,并且对它没有太多了解,所以当你编译模板函数或类与非模板函数或类相比时,我不理解它们有什么不同

c++

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

如何在c ++中定义编译单元?

可能重复:
C++中的"翻译单元"是什么

通常说在C/C++中声明的静态变量在编译单元中是不可见的?这是否意味着每个.c或.cpp文件是一个单独的编译单元?那个.h文件和.h文件中声明的静态变量怎么样?.h文件是否也被视为一个单独的编译单元?

c++ compiler-construction

18
推荐指数
3
解决办法
8590
查看次数

关于C++包括另一个类

我有两个文件:

File1.cpp
File2.cpp
Run Code Online (Sandbox Code Playgroud)

File1是我的主类,它有main方法,File2.cpp有一个类调用ClassTwo,我想在File1.cpp中创建一个ClassTwo对象

我一起编译它们

g++ -o myfile File1.cpp File2.cpp
Run Code Online (Sandbox Code Playgroud)

但是当我尝试创造时

//创建第二类对象

ClassTwo ctwo;
Run Code Online (Sandbox Code Playgroud)

它不起作用.

错误是

ClassTwo未在此范围内声明.

这是我的main.cpp

#include <iostream>
#include <string>
using namespace std;

int main()
{
//here compile error - undeclare ClassTwo in scope.
ClassTwo ctwo;

//some codes
}
Run Code Online (Sandbox Code Playgroud)

这是我的File2.cpp

#include <iostream>
#include <string>

using namespace std;

class ClassTwo
{
private:
string myType;
public:
void setType(string);
string getType();
};


void ClassTwo::setType(string sType)
{
myType = sType;
}

void ClassTwo::getType(float fVal)
{
return myType;
}
Run Code Online (Sandbox Code Playgroud)

得到了将我的File2.cpp拆分成另一个.h文件的响应但是如果我声明一个类,我如何将它拆分成另一个.h文件,因为我需要维护变量(私有)和函数的公共和私有(公共) )如何在main方法中将ClassTwo ctwo转换为File1.cpp

c++

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