相关疑难解决方法(0)

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

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

有人可以给我一个解释:

1)究竟是什么

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

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

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

c++

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

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

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

c++ namespaces

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

用于头文件中的匿名名称空间

今天有人断言你绝不应该在头文件中使用匿名命名空间.通常这是正确的,但我似乎记得有人告诉我,其中一个标准库在头文件中使用匿名命名空间来执行某种初始化.

我记得没错吗?有人可以填写详细信息吗?

c++ namespaces initialization header

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

为什么我不能在类声明中放入"using"声明?

我理解当你using在头文件中放入一个声明时可以遇到的麻烦,所以我不想这样做.相反,我试图将using(或a namespace foo =)放在类声明中,以减少头文件中的重复输入.不幸的是我遇到编译错误.似乎它将是一个有用的功能.

#ifndef FOO_H
#define FOO_H

// This include defines types in namespace gee::whiz::abc::def,
// such as the class Hello.
#include "file_from_another_namespace.h"

// using namespace gee::whiz::abc::def; // BAD!

namespace x {
   namespace y {
      namespace z {

struct Foo {
    using namespace gee::whiz::abc::def; // Illegal.
    namespace other = gee::whiz::abc::def; // Illegal.

    // Foo(gee::whiz::abc::def::Hello &hello); // annoyingly long-winded

    Foo(other::Hello &hello); // better
    //...
};

} } } // end x::y::z namespace

#endif // FOO_H …
Run Code Online (Sandbox Code Playgroud)

c++ namespaces using compiler-errors header

18
推荐指数
1
解决办法
8223
查看次数

如何在C++中定义字符串常量?

可能重复:
C++静态常量字符串(类成员)
static const C++类成员初始化在链接时给出重复的符号错误

我使用C++的经验预先添加了字符串类,所以我在某些方面重新开始.

我正在为我的类定义我的头文件,并希望为url创建一个静态常量.我这样做的方法如下:

#include <string>
class MainController{
private:
    static const std::string SOME_URL;
}

const std::string MainController::SOME_URL = "www.google.com";
Run Code Online (Sandbox Code Playgroud)

但这在链接期间给了我一个重复的定义.

我怎么能做到这一点?

c++ class definition

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

应该在头文件中使用C++命名空间别名吗?

在C++标头中使用它被认为是不好的做法using namespace.在标头中使用命名空间别名同样是个坏主意,每个实现文件应该声明它希望使用的别名吗?

由于标题是您倾向于使用完全指定名称的位置(因为我们不在标题中使用名称空间),所以别名会很有用,但它们仍然会通过您的源传播#included.

这里的最佳做法是什么?什么空间别名的范围是什么?

c++ namespaces

11
推荐指数
1
解决办法
4899
查看次数

在 VSCode 中只看到调试 C++ 的局部变量

我正在使用 Visual Studio Code,当我调试(我正在调试用 Clang 编译的 C++ 代码)时,我只看到局部变量。我没有看到任何全局变量列表。

如何查看所有变量?

在此处输入图片说明

在这种情况下,我在一个循环中,我只看到循环内部定义的所有变量,而不是外部定义的变量。

c++ visual-studio-code

11
推荐指数
1
解决办法
5992
查看次数

文件夹和命名空间会影响C++和跨平台的性能吗?

有人质疑命名空间和文件夹结构是否会影响C#中程序集的性能.答案非常有用,但具体针对C#和CLR.

如果使用gcc用C++编写,命名空间和文件夹结构将如何影响程序集的性能?其他操作系统的情况如何,例如Linux或Mac OS?

如果存在任何重大性能问题,我应该做什么或避免做什么以最大限度地提高性能?

c++ optimization performance

6
推荐指数
2
解决办法
1270
查看次数

将命名空间范围文件 - 本地(.cpp)常量放在匿名命名空间中

在命名空间范围内声明的(文件本地; .cpp)const限定变量具有内部链接,因此是转换单元本地.在匿名命名空间中仍然存在仍然包装常量的原因吗?

例如,有没有理由更喜欢以下两种中的任何一种,如果是这样,为什么呢?

// file.cpp
namespace foo {

const int kMyLocalConstant = 42;  // internal linkage

}  // namespace foo
Run Code Online (Sandbox Code Playgroud)

VS

// file.cpp
namespace foo {
namespace {

const int kMyLocalConstant = 42;  // internal linkage

}  // namespace
}  // namespace foo
Run Code Online (Sandbox Code Playgroud)

我很高兴能得到C++ 03以及C++ 11的答案,如果这个上下文中有两个不同的话.


可能重复

我已经阅读了优秀的答案

但我没有看到它回答我的具体问题(如果我错了请纠正我),因为答案集中在非const变量标识符和非静态自由函数上.我的问题集中在文件本地命名空间范围的常量,即已经具有内部链接的变量标识符.也许有一个我没有找到的更合适的骗局.

c++ namespaces linkage c++11 c++03

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

将结构放在匿名命名空间中的作用是什么?

可能重复:
为什么使用未命名的命名空间以及它们有什么好处?

查看someones代码,这是他们声明的内容:

namespace {

  struct myStruct {
     int x;
     int y;
  } obj1;

}
Run Code Online (Sandbox Code Playgroud)

..在一个函数我看到它像这样使用:

myStruct& var = obj1;
Run Code Online (Sandbox Code Playgroud)

(注意namespace是匿名的.)

从我如何使用它,我无法弄清楚为什么它被声明和使用这样.

宣布这样做的做法有何不同?

另外,为什么指针是这样创建的而不是这里显示的传统样式.即myStruct*ptr;

谢谢!

c++ oop namespaces object data-structures

4
推荐指数
1
解决办法
1974
查看次数

在匿名名称空间中定义自定义相等运算符

我有一个C结构(在C头文件中),如下所示:

struct Foo {
  int a;
  int b;
  int c;
};
typedef struct Foo Foo;
Run Code Online (Sandbox Code Playgroud)

我想测试这些结构的两个向量的相等性,因此我想为我的翻译单元为此结构定义一个自定义的相等运算符。

我能够做到

static inline bool operator==(const Foo&, const Foo&) {...}
Run Code Online (Sandbox Code Playgroud)

但不是

namespace {
    bool operator==(const Foo&, const Foo&) {...}
}
Run Code Online (Sandbox Code Playgroud)

为什么std :: vector的相等模板找不到该运算符,并且有比在全局名称空间中插入静态内联更好的方法吗?

c++ c++17

4
推荐指数
1
解决办法
96
查看次数

C++:在匿名命名空间中声明函数原型的正确方法是什么?

如果我以明显的方式在.h中声明它:

namespace <named_namespace> {
    namespace {
        …
        <type> <function>(<parameters>);
        …
    }
}
Run Code Online (Sandbox Code Playgroud)

并将其实施.cpp,将发生编译错误:

'<type> <named_namespace>::{anonymous}::<function>(<parameters>)' should have been declared inside <named_namespace>

如果不将函数的实现放在单个文件中,是否可以避免此错误?目前我使用关键字static代替,但它会产生多次恼人的警告:

'<type> <named_namespace>::<function>(<parameters>)' declared 'static' but never defined

正如我所理解的那样,只能通过将函数保存在单个文件(标题或源代码)中来禁用它.

欢迎使用交叉编译器解决方案(如果有的话).

或者将头文件拆分为"公共"和"私有"部分更有效?

c++ namespaces private function

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