-
-4 votesanswersviews
C如何使用隐藏的默认构造函数初始化成员?
我有一个隐藏默认构造函数的类,强制使用带参数的构造函数 . 另一个类使用该类的2个实例: typedef struct { ... } BAZ; class Foo { private: Foo(void) {} public: Foo(BAZ a) { ... } }; class Bar { private: Foo foo1; Foo foo... -
6 votesanswersviews
如何避免与Helgrind的误报?
我的线程同步“风格”似乎正在抛出helgrind . 这是一个简单的程序,可以重现问题: #include <thread> #include <atomic> #include <iostream> int main() { std::atomic<bool> isReady(false); int i = 1; st... -
56 votesanswersviews
为什么模板参数替换的顺序很重要?
C++11 14.8.2 - 模板参数扣除 - [temp.deduct] 7替换发生在函数类型和模板参数声明中使用的所有类型和表达式中 . 表达式不仅包括常量表达式,例如出现在数组边界中的常量表达式,还包括非类型模板参数,还包括sizeof,decltype和允许非常量表达式的其他上下文中的通用表达式(即非常量表达式) . C++14 14.8.2 - 模板参数扣除 - [tem... -
5 votesanswersviews
C 14中标准布局类的定义
标准布局类在C14的[class] / 7中定义,如下所示(重点是我的): 标准布局类是一个类: (7.1) - 没有类型为非标准布局类(或此类类型的数组)或引用的非静态数据成员, (7.2) - 没有虚函数(10.3),没有虚基类(10.1), (7.3) - 对所有非静态数据成员具有相同的访问控制(第11条), (7.4) - 没有非标准布局基类, (7.5) - 在大多数... -
-5 votesanswersviews
在C中删除空指针是否被视为未定义的行为? [重复]
这个问题在这里已有答案: Is it safe to delete a NULL pointer? 7个答案 Test for void pointer in C++ before deleting 3个答案 考虑以下代码: int main() { int *i = nullptr; delete i; } 问题: 是否删除了一个被视为未定义行为的空指针? 在C 1... -
20 votesanswersviews
带有cv限定参数的成员对象的result_of
鉴于以下声明: struct MyClass { }; typedef int MyClass::*Mp; 在我尝试过的gcc 6.2和Clang编译器上, result_of<Mp(const MyClass)>::type 产生 int&& . Summary of my question: 为什么 int&& 而不是 const int&... -
6 votesanswersviews
成员模板变量专门化
一个类可以包含一个必须是静态的成员模板变量: class B { public: template <typename X> static X var; B() { std::cout << "Create B " << __PRETTY_FUNCTION__ <&... -
2 votesanswersviews
SFINAE问题与特征检测分裂
我有以下特征来检测两个类型是否可以被整除,并返回结果操作类型或另一个 Default 类型: struct default_t { }; // Overloaded template for fallbacks template <class U, class V> default_t operator/(U, V); // If the expression std::declv... -
0 votesanswersviews
在clang中返回模板类内朋友函数的类型推导
所以,我正在尝试做的事情并不是针对课堂朋友定义的真正意图用例 . 但它确实可以在g下运行,而且我可以说,它应该按照C 14规范工作 . 出于讨论的目的,clang是5.0.0而gcc是7.2.0,尽管我已经测试了其他最近和HEAD版本并得到了相同的结果 . 一切都用c 14标志编译 . 我感兴趣的案例的最小再现是下面的 . #include <iostream> auto foo()... -
1 votesanswersviews
如何与模板类的一个实例化与同一模板中的另一个实例化
我有一个模板类,它仅将模板参数用于用户界面函数,并在内部将数据保存在某些字段中,如示例中的 i . i 的类型不是模板化的 . 所有实例化必须一起工作并访问 i ,但不能从模板的用户外部访问 i . 问题是如何结交同一模板的不同实例 . 他们必须访问其他实例化的私有数据,并且在内部所有这些实例化都是相同的 . 假设,我想比较模板的不同实例,如下例所示 . 这里 i 用于实例化其他模板参数是... -
8 votesanswersviews
C使用lambdas对函数模板进行类型擦除
我正在尝试键入擦除一个对象并遇到一个问题,我希望有人在这里可能有专业知识 . 我没有遇到任何类型的问题 - 擦除任意非模板化函数;到目前为止,我一直在做的是创建一个自定义的 static "virtual table" -esque函数指针集合 . 这都是使用非捕获lambda进行管理的,因为它们会衰减为自由函数指针: template<typename Value, ... -
3 votesanswersviews
为什么命令std :: map和ordered std :: set不被邀请进行transaction_safe?
众所周知,实验C中有Transactional Memory TS(ISO / IEC TS 19841:2015):Is it enough to declare a function as transaction_safe, so they can be used thread-safe? 并且 operator[] 仅对容器声明为 transaction_safe : std::vector... -
1 votesanswersviews
可以在其他编译器中使用Microsoft C中的typeded或typename声明构造函数吗?
好吧,它似乎在Microsoft C中工作,但不是我使用的其他编译器 . 使用模板时尤其需要 . 也许我不知道“标准兼容的方式”来做这个,但它真的很有用,我希望代码可以在gcc,clang等上编译 . template<class T, class T1, ... /* messy, verbose */ > class MyTemplate { protected: type... -
-5 votesanswersviews
为什么这些源代码(C)提供了不同的化学反应结果? [等候接听]
当我在Linux,Windows和在线编译器上运行这些源代码时,它总是提供不同的结果,但我认为两个源代码都是相同的 . 请描述有关这些代码的任何想法 . 第一个代码: #include<iostream> using namespace std; int main() { double a=100.0,b=50.0,c=0.0,da,db,dc; double k1=0... -
0 votesanswersviews
将辅助函数移动到头文件
一开始我有: main.cpp中 #include "something.h" #include "util.h" int main() { sth::something(); utl::little_thing(); } somehing.h #ifndef SOMETHING_H #define SOMETHING_H namesp... -
1 votesanswersviews
gcc 4.9递归lambda返回时的内部编译器错误
我有一小段代码可以在clang repo head(3.5)中编译好,但在gcc 4.9 repo head中没有 . 虽然这看起来像一个gcc bug,但在发送bugzilla之前我想问你是否 这是有效的c 1y代码(在当前的草稿状态中) - 只是因为clang编译它没有理由使它成为正确的代码,并且 如果有人可以重现这个bug . 使用clang编译和运行的代码片段在这里: http... -
8 votesanswersviews
SFINAE constexpr与std :: get
这是Detecting constexpr with SFINAE的后续问题 . 我想检测元组的元素(或任何可与 std::get 一起使用的元素)是否为constexpr . 所以我编写了以下助手,类似于Xeo给出的: template<size_t> struct sfinae_true : std::true_type{}; template<size_t N, clas... -
136 votesanswersviews
在std :: vector :: erase()和std :: deque :: erase()中复制/移动赋值
在回答another question的过程中,我偶然发现 std::vector::erase() 和 std::deque::erase() 的措辞略有不同 . 这就是C 14所说的 std::deque::erase ( [deque.modifiers]/4-6 ,强调我的): 效果:...复杂性:对析构函数的调用次数与擦除的元素数相同,但对赋值运算符的调用次数不超过元素数量中的较小者 ... -
50 votesanswersviews
C 11:正确的std :: array初始化?
如果我按如下方式初始化std :: array,编译器会给出一个关于缺少大括号的警告 std::array<int, 4> a = {1, 2, 3, 4}; 这解决了这个问题: std::array<int, 4> a = {{1, 2, 3, 4}}; 这是警告信息: missing braces around initializer for 'std::array... -
199 votesanswersviews
现代C可以免费获得性能吗?
有时声称即使只编译C 98代码,C 11/14也可以提升性能 . 理由通常是移动语义,因为在某些情况下,rvalue构造函数是自动生成的,或者现在是STL的一部分 . 现在我想知道这些案例以前是否已经由RVO或类似的编译器优化处理过了 . 我的问题是,如果你能给我一个C 98代码的实际例子,使用支持新语言功能的编译器,无需修改,运行得更快 . 我确实理解标准符合编译器不需要执行复制省略,因此移动语... -
13 votesanswersviews
如何声明一个推导出其返回类型的函数?
考虑这个 C++1y 代码(LIVE EXAMPLE): #include <iostream> auto foo(); int main() { std::cout << foo(); // ERROR! } auto foo() { return 1234; } 编译器(GCC 4.8.1)慷慨地发现了这个错误: main.cpp:在函数'... -
8 votesanswersviews
clang vs gcc - 空泛型lambda variadic参数包
我想我发现lambdas和可调用对象之间存在另一个不一致的问题 . decltype(l)::operator() 应该等效于 C::operator() ,但如果variadic pack在泛型lambda中保留为空,则gcc拒绝编译: 15:错误:对'(main()::)(int)'l(1)的调用不匹配; 15:注意:候选人:decltype(((main()::) 0u).main()::... -
0 votesanswersviews
C / C中两个数组的元素乘法
我想执行两个数组的元素明智的乘法,两者都是复杂的类型,但我收到以下错误消息: serge@ubuntu:~/Downloads/OpenCV/opencv-2.4.9/build$ g++ -o myfft myfft.cpp -std=c++14 In file included from myfft.cpp:14:0: cs_delay.cpp: In function ‘void cs_d... -
2 votesanswersviews
为什么在Visual C 2015 update 3中没有使用constexpr自动返回类型推导?
此代码在GCC 4.9和Clang 3.5(带有标志-std = c 14)中编译并运行良好,但在VC 2015中给出了编译错误 . 请注意 operator* 中的自动返回类型: #include <cstdio> struct A { int i; constexpr A() : i(0) {}; constexpr A(int i) : i(i) {};... -
1 votesanswersviews
C正则表达式:非贪婪的比赛
我正在尝试制作一个匹配URL参数的正则表达式并提取它们 . 例如,如果我得到以下参数字符串 ?param1=someValue&param2=someOtherValue , std::regex_match 应该提取以下内容: param1 some_content param2 some_other_content 尝试不同的正则表达式模式后,我最终构建了一个与我想... -
10 votesanswersviews
是否复制构造函数和std :: runtime_error的复制赋值noexcept?
所有GCC 4.8.4,4.9.3,5.3.0都通过了 std::exception 的测试(对于任何-std = c 11 / 1y / 14 / 1z / 17选项,如果可用): static_assert(std::is_nothrow_copy_constructible<std::exception>::value, "test exception"); ... -
24 votesanswersviews
static_assert依赖于非类型模板参数(gcc和clang上的不同行为)
template <int answer> struct Hitchhiker { static_assert(sizeof(answer) != sizeof(answer), "Invalid answer"); }; template <> struct Hitchhiker<42> {}; 尝试使用 static_assert... -
8 votesanswersviews
Clang vs G不同意关于类模板的参数数量和模板模板参数重新声明
在下面的示例中, Abstract 是一个类模板,其第一个参数是一个类型,第二个参数是另一个模板,它带有一个bool以及任意数量的args . template<bool,typename> struct Default; template< typename T = void, template<bool,typename ...> class... -
3 votesanswersviews
使类模板强制在继承构造函数中重复基类模板参数
我最近将一个类从模板改为不,并发现在编写using声明从模板化基类继承构造函数时,我不能再省略模板参数 . 只要我的 class 不是't templated I can omit the arguments, as soon as it is I can' t . 在下面的可编辑片段中, bar 表示之前的类,而 buzz 表示之后的类 . 我测试了GCC 5.2和Clang 3.7,它们具有相... -
24 votesanswersviews
是否可以在编译时读取文件?
我想知道在C 11/14中是否有可能在编译时实际读取文件 . 例如,以下代码只有在能够成功读取文件的情况下才会编译 . constexpr std::string shader_source = load("~/foo.glsl"); 你认为这可能吗? 我知道在构建应用程序时我可以使用一些自定义工具执行此操作 .