问题标签 [translation-unit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 使用返回在另一个翻译单元中定义的占位符类型的函数
我很难理解如何实现N3638auto
中描述的类型说明符的 C++14 扩展,以及究竟允许什么。
具体来说,该标准的一项更改说,
如果函数声明的返回类型包含占位符类型,则函数的返回类型是从函数体中的返回语句推导出来的,如果有的话。
当函数体与声明在同一个文件中时,很容易看出这是如何工作的;但考虑头文件使用auto
占位符声明方法但未定义它的情况。包含此头文件但不包含定义方法的文件的翻译单元如何编译成功?
例如,给定文件foo.hpp
:
...和文件foo.cpp
:
...和文件main.cpp
:
main.cpp
...自行编译是否合法?如果不是,为什么不呢?如果是这样,如何get_x
实例化,因为编译器无法知道gen_data
even 的返回类型是否有一个名为 的成员x
,更不用说它的偏移量是多少了?
不过,即使不担心模板实例化,这似乎也是个问题;例如,如果您尝试f.gen_data().x
直接访问或将其传递给函数会发生什么?
c++ - 单独文件c ++中的每个方法
在遇到一些内存分配问题之后。我正在尝试将每个方法都放在一个单独的文件中,这是原始程序:
更新
这就是我所做的:完整程序更新 21.03.2015
但是当我尝试编译它时,我遇到了这些错误:https ://github.com/mohsenuss91/Academic/blob/master/NouvelleApprocheBOOST_MEMORY/errors.txt
c++ - 不同翻译单元中的模板实例
据我所知,每个模板在每个翻译单元上都有不同的实例,据我了解,翻译单元大致是一个cpp
文件。
因此,如果我有一个名为test.hpp
以下内容的文件:
对于每个翻译单元,test
即使每个翻译单元的模板参数T
相同,我也应该有一个不同的实例。我决定对其进行测试,因此我创建了以下文件(为简洁起见,省略了包括守卫):
我们可以看到,两者都a.cpp
使用b.cpp
了模板的int
实例,test()
但是在不同的翻译单元中,所以执行下面的程序:
我期待一个输出,00
但我得到01
了。我用来测试此代码的 IDE 是 MSVC2010 V10.0.4 SP1。
那么问题是什么?
- 我对模板和翻译单元的理解有误吗?或者...
- 我对这个测试代码做错了什么?
c - 将代码拆分为文件和 O 标志
当使用可以在 C 中并行执行的代码编写程序时,我们肯定会使用O 标志来优化代码。
在大型项目中,我们通常将代码拆分成几个文件。我没有找到答案的问题是:
由于我们将代码拆分为文件并且O
标志没有足够的信息来进一步优化,程序的性能是否会下降?有这种可能吗?
c++ - 跨不同翻译单元的c ++变量/实例初始化顺序
提前致谢。
我在一些实际项目中看到了这些代码。我只是简化了它们来表达我的问题。基类将this指针放入其构造函数中的 a vector(vec)中。使用这个技巧,我们可以利用动态绑定在外部(在 main func 中)调用派生类的方法。关键是将向量定义放在Bash.h中,声明放在main.cpp中。
我的问题是,输出不是我想要的。为什么 vec 在一个 Translation 单元(base.c,我们可以看到大小为 1)中初始化并使用,然后在其他 Translation 单元(main.c,我们可以看到大小变为 0),又被初始化并清除?我想知道不同翻译单元的初始化顺序。似乎 Derive::dInstance 是第一位的,然后 vec 是第二位的,但是为什么呢?
基数.h
基数.cpp
导出.h
导出.cpp
主文件
输出:
c++ - 在确保翻译单元之间的可用性时是否不推荐使用静态?
从以下stackoverflow 答案中,用户说:
这意味着该变量对于翻译单元是本地的(简单地说,对于单个源文件),并且不能从其外部访问。这种使用 static 实际上在当前的 C++ 标准中已被弃用 - 相反,您应该使用匿名命名空间:
应该:
我不同意匿名命名空间是首选方法,
但现在真的不推荐使用静态了吗?
标准在哪里说这个?
c++ - C++ 中的翻译单元 vs 编译单元 vs 目标文件 vs 可执行文件 vs....
我找不到翻译单元、编译单元、目标文件、可执行文件之间的区别……在很多地方,我看到使用一个而不是另一个。
我知道这些文件是在 C++ 程序编译和链接期间生成的。谁能列出这些过程中将生成的所有文件并指定它们之间的差异?
c++ - 函数内的静态变量与c ++中的静态类变量
对于某个对象的唯一 ID,我可以通过两种方式创建一个计数器,但我不知道哪个更好,因为它们在代码中完全不同(尽管可能不是字节码,我不知道)。
第一种方法是使用一些使用静态变量的函数:
标题:
cp:
另一种选择:
标题:
cp:
仅供参考,我读过前者不是线程安全的,但我不明白为什么后者也是。如果有的话,我更喜欢简单的功能,因为它更简单、更短。
c++ - 为什么 C++ 运算符 new/delete/variants 不应该在头文件中?
有人可以解释这个 C++ 编译错误的性质吗?我正在涉足/学习重载全局运算符 new、delete 及其变体。我阅读了几篇 关于这个主题的 文章 ,但我找不到一篇似乎专门解决这个问题的文章。
编码
foo.h
:
foo.cpp
:
编译错误
关于这个问题的一些奇怪之处我认为是相关的:
- 如果我注释掉
#include <iostream>
,foo.cpp
编译成功 - 如果我注释掉 中的函数声明,并且
foo.h
只保留它们的定义,则编译成功。foo.cpp
#include <iostream>
我有一些模糊的怀疑;也许回答者会通过他们的回答来确认:
- 该错误提到了一个,
exception specifier
所以我想也许通过覆盖这些运算符中的任何一个,我有义务覆盖他们的兄弟姐妹的整个套件。但是,添加operator delete(void*, const std::nothrow_t&)
声明和定义并没有改变编译错误。我也不认为重写这些运算符中的任何一个会迫使编码器实现所有这些运算符是正确的,但我错了吗? - 我在 StackOverflow 之外阅读了一篇文章,提到这些运算符只能包含在一个“翻译单元”中,因此不应包含在头文件中。我不明白什么是翻译单元,那篇文章也没有解释它是什么。如果这与这个问题有关,请解释什么是“翻译单元”以及为什么需要从头文件中排除函数声明——这似乎与我之前的所有 C++ 编码经验背道而驰。
感谢您的任何见解。
c++ - 文件中不包含头文件,但仍可以使用未包含的头文件中的类/函数
这是相关文件中的一些代码,称为 Global.h,它在其他头文件中使用并且似乎编译得很好:
如您所见,我可以使用字符串和 ostream 对象,而无需声明使用命名空间或特定文件。显然这意味着 Global.h 正在从其他地方获取信息,但我很好奇这些信息来自哪里?我一直认为,如果文件本身中的#include 指令包含了其他文件的代码,则头文件只会从其他文件中重新转换代码,所以我不确定这是怎么发生的,并且很想知道发生了什么。