C99标准是否要求符合标准的编译器具有64位int64_t 定义(和可用)?或者它是可选的,恰好被所有流行的编译器定义?我显然要特别询问CPU无法直接处理64位值的平台,但问题更为笼统
我不能真正从C数据类型维基百科页面中找出这一点,也不能从这个相关问题的答案中解决这个问题.
我最近注意到C99 中存在复数值类型(在注意到它们的构造宏是 C11 的一个功能之后)。
由于这是 C,所以这些是内置类型,而不是具有重载运算符等的结构。但是 - 我是否可以将它们视为基于 C++ 的模板std::complex?IE。实际上float _Complex与 相同并且std::complex<float>与double _Complex相同std::complex<double>?
注意:当然,它们具有完全相同的行为,因为 C++ 具有 C 没有的功能,但可以认为我们将自己限制在除这两种类型之外的“C 子集”。
如果它们实际上不相同 - 请解释它们有何不同。
我目前正在利用范围构造函数std::vector来创建给定子范围的另一个向量。
std::vector<int> myVect { 1, 2, 3, 4 };
std::vector<int> subrangeVector(myVect.begin(), myVect.begin() + 2);
Run Code Online (Sandbox Code Playgroud)
但是,这会导致 myVect 的范围值被复制并占用额外的内存。当使用有限的内存和/或非常大的元素类型时,这是不可取的。
如何通过引用构建另一个向量的子范围?
我的目标的简化解释如下:
void fun(std::vector<int> & v) { v.at(0) = 1; }
int main()
{
std::vector<int> myVect { 1, 2, 3, 4 };
std::size_t upperLimit = 5;
std::vector<int> subrangeVector = subrangeView(myVect, upperLimit);
fun(subrangeVector); // so myVect.at(0) == 1
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这将在std::vector用作参数的许多不同函数中实现。我不想传递这里讨论的迭代器。假设我无法控制函数fun。
我从一个神奇的gremlin中获得了内存中非负整数值的数组,例如type I。这些中的每一个都代表某个时期以来的天数(在ISO 8601日历中,该时间比0早许多年)。
现在,我想用C ++类包装这些值(基本上是通过指针或重新解释),它们可以与的代码很好地交互std::chrono,或者也许我应该说将它们与通常需要std::chrono时间点和持续时间的代码一起使用。
为此,我最好的做法是什么?注意我不想替换数组中的任何数据,也不想为其他地方的每个现有数据创建新值。
I am using C++ 14 and am trying to get the current day of week. After some reading I am using date.h by Howard E. Hinnant.
However I am struggling to get a day of the week (encoded as 0 thru 6).
Something like this prints out Thu:
int main(void)
{
date::sys_days t;
weekday wd{t};
cout << wd << '\n';
}
Run Code Online (Sandbox Code Playgroud)
Many answers on this site regarding getting the current day of the week use chrono.
How can …
我尝试使用 libclang 解析 C++ 标头,但解析器仅解析类名 - 并将其类型显示为 VarDec1。当文件扩展名从 .h 更改为 .cpp 时,它就可以正常工作。经过几天的搜索找不到答案,有人可以帮我解决这个问题吗?
以下是parser.cpp:
#include <iostream>
#include <clang-c/Index.h> // This is libclang.
using namespace std;
ostream& operator<<(ostream& stream, const CXString& str)
{
stream << clang_getCString(str);
clang_disposeString(str);
return stream;
}
int main()
{
CXIndex index = clang_createIndex(0, 0);
CXTranslationUnit unit = clang_parseTranslationUnit(
index,
"tt.h", nullptr, 0,
nullptr, 0,
CXTranslationUnit_None);
if (unit == nullptr)
{
cerr << "Unable to parse translation unit. Quitting." << endl;
exit(-1);
}
CXCursor cursor = clang_getTranslationUnitCursor(unit);
clang_visitChildren(
cursor, …Run Code Online (Sandbox Code Playgroud) int indent = 0;
int listDir(const char* dirname){
DIR* dir;
struct dirent* d;
if(!(dir = opendir(dirname)))
return -1;
while((d = readdir(dir)) != NULL){
if(strcmp(d->d_name, ".") == 0 || strcmp(d->d_name, "..") == 0 ){
continue;
}
else if(d->d_type != DT_DIR){ // Any except folders.
printf("%*s- %s:%ld\n", indent, "", d->d_name, d->d_ino);
}
else if(d->d_type == DT_DIR){ // Folders only
printf("%*s[%s]\n", indent, "", d->d_name);
char path[1024];
snprintf(path, sizeof(path), "%s/%s", dirname, d->d_name);
indent +=2;
listDir(path);
indent -=2;
}
Run Code Online (Sandbox Code Playgroud)
我需要输出是容器文件夹、文件和文件夹。文件夹应位于列表的末尾。例如,上面的输出应该是:
考虑以下 Graphviz 代码:
digraph g1 {
compound = true;
node [shape = box, style=filled, fillcolor=Khaki] a;
subgraph sg1 {
node [shape = "", style="", fillcolor=""] b -> c;
graph [style=solid, penwidth=3];
}
}
Run Code Online (Sandbox Code Playgroud)
这产生:
为什么我没有得到子图/簇周围的边框?
我想以相反的顺序迭代一个向量,我知道我可以通过下面的代码轻松完成
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<int> v(10);
for(auto it=v.rbegin();it!=v.rend();it++)
cout<<*it<<"";
}
Run Code Online (Sandbox Code Playgroud)
为了向前迭代,我们可以简单地通过下面的代码来完成。
for(auto it:v)
cout<<it<<" ";
Run Code Online (Sandbox Code Playgroud)
现在的任务是...
是否可以进行类似于for(auto it:v) cout<<it<<" ". 如果是,那么如何?
在关于运行时与驱动程序 API 的讨论中,据说
主要上下文根据需要创建,每个设备每个进程一个,并进行引用计数,然后在不再有对它们的引用时销毁。
什么算作此类参考文献?而且——这是否意味着,通常情况下,主要上下文应该在重复使用后立即被销毁?例如,您获得默认设备 ID,然后启动内核;还剩下什么“参考资料”?当然它不是保存设备 ID 的整数变量......