如何使用模板表达成员之间的约束?
假设我有一个包含一堆成员的结构: struct foo { int len; bar *stuff; }; 碰巧 stuff 将指向一个 bar 数组,长度为 len。我想将其编码为 stuff 的类…
标准措辞在哪里允许在函数声明中使用不完整类型,但在函数定义中要求完整类型?
我最近发现非定义函数声明中的参数类型可能是不完整类型。这非常令人兴奋。 class A; class B { B(A a); // Legal! Wow! }; 仅在定义时才要求类型完整…
C++11 是否会更改显式调用 std::swap 的行为以确保找到位于 ADL 的交换区(如 boost::swap)?
背景 考虑以下代码: #include namespace ns { struct foo { foo() : i(0) {} int i; private: foo(const foo&); // not defined, foo& operator=(con…
NaN 到 Bool 的转换:True 还是 False?
C++ 规范或 IEEE float 规范的哪一部分规定 NaN 值应转换为 true 而不是 false? 如果我查看 C++ 标准部分 4.12 布尔转换,它会显示: 零值、空指针值…
为什么现有的函数参数不能用于计算其他默认参数?
我正在编写一个函数 foo(),它接受 2 个 const char* 作为参数,pBegin 和 pEnd。 foo() 被传递一个以 null 结尾的字符串。默认情况下,pEnd 指向字符…
是否允许在 Base 实例上写入 Derived 实例?
可以说,代码 class Derived: public Base {....} Base* b_ptr = new( malloc(sizeof(Derived)) ) Base(1); b_ptr->f(2); Derived* d_ptr = new(b_ptr…
放弃函数参数的常量是否是未定义行为?
想象一下,我有这个 C 函数(以及头文件中的相应原型), void clearstring(const char *data) { char *dst = (char *)data; *dst = 0; } 上面的代码…
C++03。在编译时测试右值与左值,而不仅仅是在运行时
在 C++03 中,Boost 的 Foreach 使用这种有趣的技术,可以检测在运行时表达式是左值还是右值。 (我发现通过这个StackOverflow问题:C++03中的Rvalues…
块范围静态变量或线程存储持续时间变量初始化失败的原因是什么?
在回答这个问题并且在标准论文中没有找到令人满意的答案后,我开始思考。该标准规定了上述变量的以下 wrt 初始化: §6.7 [stmt.dcl] p4 [...] 否则,…
通过 bool 进行 char 往返转换会发生什么?
C++ 语言定义对于将 char 转换为 bool 然后再次转换回 char 有何承诺? char original = 255; bool next = original; char final = next; 另外,在这…
glob 是否应该使用 GLOB_MARK 将 / 附加到符号链接到目录结果?
glob 函数有一个 GLOB_MARK 标志,指定将斜杠附加到目录结果中: GLOB_MARK 作为与模式匹配的目录的每个路径名都应附加一个 。 (来源:http://pubs.o…