language-lawyer

    4热度

    1回答

    此问题与Does this C++ static analysis rule make sense as is?有关,但有所不同。我现在已经实现了一个静态分析规则找到的情况下函数返回的常量引用参数作为参考,如 const X& f(const X& x) { return x; } 这是当一个临时势必x潜在的狡猾,因为寿命临时结束之前f的返回值可以绑定到调用者的引用。换一种方式,这将是有问题的

    2热度

    3回答

    是否有可能检测到在给定的代码点上您是否在命名空间中?特别是,如果一个文件包含在全局命名空间中,我想包含一个警告。

    3热度

    3回答

    在阅读this SO question的答案时,我了解到超出边界的指针算术是未定义的。实际上,根据C99 6.5.6段落8 如果 指针操作数两者,并将结果指向相同 阵列对象的元素,或一个过去的阵列 对象的最后一个元素时,评估应不产生溢出; 否则,行为是不确定的。 释放该对象是否使该保证无效? 7.20.3.2“自由功能”似乎没有提到它,只是提到“空间被释放”。由于6.5.6特别提到了溢出问题,它看

    10热度

    2回答

    我以为只引用的临时的寿命延长到引用本身的寿命,但下面的代码片段的输出似乎有矛盾: #include <iostream> struct X{ ~X(){ std::cout << "Goodbye, cruel world!\n"; } }; X const& f(X const& x = X()){ std::cout << "Inside f()\n"; retur

    13热度

    4回答

    在this answer和附加注释Pavel Minaev中提出以下论点:在C中,uint8_t可被键入的唯一类型是char和unsigned char。我正在查看C标准的this draft。 的uint8_t存在意味着相应类型int8_t(7.18.1p1)的存在。 int8_t是8位宽,没有填充位(7.18.1.1p1)。 对应的类型具有相同的宽度(6.2.5p6),所以uint8_t也是8

    26热度

    2回答

    在Stroustrup的C++编程语言的书(第3版),在Numerics的章节,他给出了下面的代码片段: void f(valarray<double>& d) { slice_array<double>& v_even = d[slice(0,d.size()/2,2)]; slice_array<double>& v_odd = d[slice(1,d.size()/2,

    -5热度

    1回答

    是否合法作出atexit电话pthread_exit?没有它时main()返回所有的线程被终止。 (琐细的解决办法是修改main()打电话pthread_exit()本身,而这是不可能在这个小例子,从获得的情况下)。 #include <unistd.h> #include <cstdlib> #include <iostream> #include <pthread.h> void *

    8热度

    2回答

    该标准规定:“一个thread :: id类型的对象为所有不代表执行线程的线程对象提供一个不同的值。这是关于operator==的单一/不同值,还是实际按位单一/不同值? 问题的原因:MSVC2012的std::thread::id::id()在其中一个字段中留下垃圾,并且它破坏了在std::atomic<std::thread::id>上进行比较交换的代码(因为后者取决于按位比较)。 是std:

    2热度

    2回答

    假设我有一个类Baz,该类依次从类Foo和Bar继承。类Bar的构造函数会获取指向Foo对象的指针。我想这样做是通过this作为Foo对象到Bar构造: Baz() : Foo(), Bar(this) {} 工作的示例: #include <iostream> class Bar; class Foo { public: virtual ~Foo() {}

    12热度

    2回答

    我实施一些C++静态分析规则,并且它们中的一个从返回一个引用或指针的功能的参考参数,即,下面的禁止的功能是不符合所有: int *f(int& x) { return &x; } // #1 const int *g(const int& x) { return &x; } // #2 int& h(int& x) { return x; } // #3 const int& m(const