Questions tagged «c++»

C ++是一种通用编程语言。它最初被设计为C的扩展,并且具有类似的语法,但是现在它是一种完全不同的语言。使用此标记可解决有关将要使用C ++编译器编译的代码的问题。对于与特定标准修订版[C ++ 11],[C ++ 14],[C ++ 17]或[C ++ 20]等相关的问题,请使用特定于版本的标记。

5
当空指针不全为零时如何正确编写C / C ++代码
正如comp.lang.c常见问题解答所说,在某些体系结构中,空指针并非全为零。所以问题是什么实际上检查以下构造: void* p = get_some_pointer(); if (!p) return; 我是在p与机器相关的空指针进行比较p,还是在与算术零进行比较? 我应该写 void* p = get_some_pointer(); if (NULL == p) return; 而是为这种架构做好准备,还是只是我的偏执?



6
C ++ 14中的Lambda-Over-Lambda
接下来的递归lambda调用如何结束/终止? #include <cstdio> auto terminal = [](auto term) // <---------+ { // | return [=] (auto func) // | ??? { // | return terminal(func(term)); // >---------+ }; }; auto main() -> int { auto hello =[](auto s){ fprintf(s,"Hello\n"); return s; }; auto world =[](auto s){ fprintf(s,"World\n"); return s; }; …
69 c++  lambda  c++14 

5
C ++中未命名名称空间的使用
什么时候在C ++中使用未命名的命名空间?从某种意义上说,它比独立功能更好吗?另外,应该仅在源文件中使用它,而不在头文件中使用它吗?
69 c++  namespaces 

5
什么是`int foo :: * bar :: *`?
C ++的一个很酷的功能是,它允许您创建指针到成员类型的变量。最常见的用例似乎是获取方法的指针: struct foo { int x() { return 5; } }; int (foo::*ptr)() = &foo::x; foo myFoo; cout << (myFoo.*ptr)() << '\n'; // prints "5" 但是,一团糟,我意识到它们也可以指向成员变量: struct foo { int y; }; int foo::*ptr = &foo::y; foo myFoo; myFoo.*ptr = 5; cout << myFoo.y << '\n'; // prints "5" …

2
可以在头文件中使用lambda违反ODR吗?
可以将以下内容写在头文件中: inline void f () { std::function<void ()> func = [] {}; } 要么 class C { std::function<void ()> func = [] {}; C () {} }; 我猜在每个源文件中,lambda的类型可能不同,因此std::function(target_type的结果中包含的类型会有所不同)。 尽管看起来像是一种常见模式并且是合理的做法,但这是否违反了ODR(一个定义规则)?第二个样本是否每次都违反ODR?或者仅在头文件中至少有一个构造函数时才违反?

2
Lambda作为基类
在Lambdas上玩耍时,我发现了一个有趣的行为,但我并没有完全理解。 假设我有一个struct Overload从2个模板参数派生的,并且有一个using F1::operator();子句。 现在,如果我派生自两个函子,则只能访问F1的operator()(正如我期望的那样) 如果我从两个Lambda函数派生,则不再适用:我也可以从F2访问operator()。 #include <iostream> // I compiled with g++ (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8) // // g++ -Wall -std=c++11 -g main.cc // g++ -Wall -std=c++11 -DFUNCTOR -g main.cc // // or clang clang version 3.3 (tags/RELEASE_33/rc2) // // clang++ -Wall -std=c++11 -g main.cc // clang++ …
69 c++  c++11  lambda 

7
ctypes错误:libdc1394错误:无法初始化libdc1394
我正在尝试将程序编译为一个共享库,可以在使用ctypes的Python代码中使用该共享库。 使用以下命令,库可以正常编译: g++ -shared -Wl,-soname,mylib -O3 -o mylib.so -fPIC [files] `pkg-config --libs --cflags opencv` 但是,当我尝试使用ctypes导入它时 from ctypes import * mylib = CDLL("/path/to/mylib.so") print mylib.test() // Expected output: Hello World 我收到以下错误: libdc1394 error: Failed to initialize libdc1394 这是怎么回事?

3
C ++中的静态变量
我想知道头文件中的静态变量与类中声明的静态变量之间有什么区别。在头文件中声明静态变量时,其范围仅限于.h文件或跨所有单元。同样,通常在类中声明时,静态变量会在.cpp文件中初始化吗?那是否意味着静态变量范围限制为2个编译单元?
69 c++  static  scope 

2
如何在Mac Terminal中使用C ++ 11支持编译C ++
我想在Mac Terminal中编译C ++ 11源代码,但失败了。我试过g++ -std=c++11,g++ -std=c++0x,g++ -std=gnu++11和g++ -std=gnu++0x,但毫无效果。终端总是读unrecognized command line option。但是,g++ -std=gnu类似的东西工作正常(当然,C ++ 11源代码无法通过)。 我应该使用哪个选项来打开C ++ 11支持? 顺便说一句,我正在使用的命令行工具已安装在Xcode中,并且我很确定它们是最新的。
69 c++  macos  c++11  terminal  g++ 

4
迭代器的默认值是多少?
对于我正在使用的任何STL容器,如果我使用迭代器的默认构造函数声明一个(此特定容器类型的)迭代器,则该迭代器将初始化为什么? 例如,我有: std::list<void*> address_list; std::list<void*>::iterator iter; 将初始化什么?

9
C ++中的垃圾收集库
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 7年前关闭。 改善这个问题 哪些免费的和商业的垃圾收集库可用于C ++,每种都有哪些优缺点? 我对在该领域的实际使用中来之不易的教训感兴趣,而不是市场营销或促销宣传中的教训。 无需详细说明与自动垃圾收集相关的通常的取舍,但是请务必提及所使用的算法(引用计数,标记和清除,增量等),并简要总结其后果。

3
std :: tuple sizeof,是否错过了优化?
我已经检查了所有主要的编译器,并且sizeof(std::tuple<int, char, int, char>)所有这些都是16。大概它们只是将元素按顺序放入元组中,因此由于对齐而浪费了一些空间。 如果元组在内部像这样存储元素:int, int, char, char,则其sizeof可以为12。 实现有可能执行此操作,还是该标准中的某些规则禁止这样做?

2
为什么shared_ptr仅使用一个时,unique_ptr会使用两个模板参数?
双方unique_ptr并shared_ptr接受定制的析构函数他们所拥有的对象上调用。但在的情况下unique_ptr,析构函数作为一个模板参数传递类,而类型shared_ptr的自定义析构函数将被指定为一个模板参数的构造函数。 template <class T, class D = default_delete<T>> class unique_ptr { unique_ptr(T*, D&); //simplified ... }; 和 template<class T> class shared_ptr { template<typename D> shared_ptr(T*, D); //simplified ... }; 我不明白为什么会有这样的差异。有什么要求?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.