小编Fre*_*urk的帖子

您是否使用TR 24731'安全'功能?

ISO C委员会(ISO/IEC JTC1/SC21/WG14)已发布TR 24731-1,正在研究TR 24731-2:

TR 24731-1:C库的扩展第一部分:边界检查接口

WG14正在研究更安全的C库函数.该TR旨在通过添加具有缓冲区长度的额外参数来修改现有程序.最新草案见N1225号文件.理由是在N1173号文件中.这将成为技术报告类型2.

TR 24731-2:C库的扩展 - 第二部分:动态分配功能

WG14正在研究更安全的C库函数.该TR面向使用动态分配而不是缓冲区长度的额外参数的新程序.最新草案见N1337号文件.这将成为技术报告类型2.

问题

  • 您是否使用支持TR24731-1功能的库或编译器?
  • 如果是这样,哪个编译器或库以及哪个平台?
  • 您是否因修复代码以使用这些功能而发现任何错误?
  • 哪些功能提供最大价值?
  • 有没有提供任何价值或负值?
  • 你打算将来使用这个图书馆吗?
  • 您是否正在跟踪TR24731-2的工作?

c security coding-style tr24731

71
推荐指数
5
解决办法
1万
查看次数

如何判断是否使用了glibc

我正在尝试为大型框架实现回溯功能,该框架用于不同的平台和操作系统.在其中一些中,它与glibc相关联,而在另一个中,使用了不同的东西(例如uclibc).backtrace()函数仅存在于前者中.

有没有办法判断glibc是否被使用?任何#define?我无法在glibc手册中找到答案.我知道在编译期间我不能有链接时间信息,但我想包含文件必须有所不同.至少必须在某处声明回溯.我想检查它而不必强制将显式标志传递给编译器.

c c++ glibc

26
推荐指数
3
解决办法
1万
查看次数

如何重载"函数调用"操作符有用吗?

我最近发现在C++中你可以以一种奇怪的方式重载"函数调用"操作符,你需要编写两对括号来执行此操作:

class A { 
  int n;
public: 
  void operator ()() const; 
};
Run Code Online (Sandbox Code Playgroud)

然后以这种方式使用它:

A a;
a();
Run Code Online (Sandbox Code Playgroud)

什么时候有用?

c++ operator-overloading functor function-object

25
推荐指数
3
解决办法
2万
查看次数

具有类参数的函数是否从命名空间泄露?

我在这里有一小段代码供您考虑,这让我感到非常困惑.奇怪的是,它在Sun Studio和GCC上编译,即使我认为它不应该.

考虑一下:

namespace name
{
  class C
    {
      int a;
    };

  void f(C c);
  void g(int a);
}

int main(int argc, char** argv)
{
  name::C c;

  name::f(c); 
  f(c);  // <--- this compiles, strangely enough

  name::g(42);
  // g(42);  <--- this does not, as I expected
}
Run Code Online (Sandbox Code Playgroud)

来自同一命名空间的类参数会导致函数f"泄漏"到命名空间之外,并且无需访问name::.

有人对此有解释吗?这当然是我而不是编译器在这里错了.

c++ namespaces argument-dependent-lookup

22
推荐指数
3
解决办法
943
查看次数

标准库和标准模板库有什么区别?

我一直在看C++标准库和C++标准模板库(STL).他们之间有什么区别?维基百科提到他们共享一些标题,但这就是它.

c++ standards stl c++-faq

21
推荐指数
1
解决办法
5519
查看次数

为什么std :: swap移动到<utility>?

为什么要std::swap转移到<utility>C++ 11 的标题?

N3290 C.2.7说:

17.6.3.2

对原始功能的影响:功能交换移动到不同的标头

基本原理:删除对<algorithm>swap的依赖.

对原始功能的影响:已编译的有效C++ 2003代码期望交换<algorithm>可能必须包含<utility>.

我无法理解这部分的粗体.正在讨论什么样的依赖关系?为什么?

c++ swap rationale c++11

18
推荐指数
1
解决办法
1774
查看次数

将指针与不同数组进行比较以获得相等性是否是未指定的行为?

等于运算符对指针的关系运算符有语义限制:

==(等于)和!=(不等于)运算符具有与关系运算符相同的语义限制,转换和结果类型,除了它们的优先级和真值结果.[C++03§5.10p2]

关系运算符对比较指针有限制:

如果同一类型的两个指针p和q指向不是同一个对象的成员或同一个数组的元素或不同函数的不同对象,或者只有其中一个为null,则p <q,p的结果> q,p <= q,p> = q未指定.[§5.9p2]

这是一个由等式运算符"继承"的语义限制吗?

具体来说,给出:

int a[42];
int b[42];
Run Code Online (Sandbox Code Playgroud)

很明显,(a + 3)<(b + 3)是未指定的,但是(a + 3)==(b + 3)也未指定?

c++ standards pointers unspecified-behavior

16
推荐指数
3
解决办法
2565
查看次数

如何隐藏Firefox v29.0的地址栏(导航栏)?

我已经在Firefox中使用Vimperator很长一段时间了.我想隐藏或删除地址栏以获得更大的主窗口.但是,在更新到v29.0之后,无法隐藏或删除地址栏.我怎样才能做到这一点?或者哪个加载项可以帮助?

这是我旧版本的屏幕截图(在v29.0之前); 你可以看到地址栏已被隐藏:

Firefox截图

firefox vimperator

15
推荐指数
1
解决办法
2万
查看次数

什么是decltype(0 + 0)?

(答案提示.)

鉴于N3290,§7.1.6.2p4,其中列表项目未编号,但为了方便我们编号:

decltype(e)表示的类型定义如下:

  1. 如果e是未表示的id-expression或未加密的类成员访问(5.2.5),则decltype(e)是e所命名的实体的类型.如果没有这样的实体,或者如果e命名了一组重载函数,那么该程序就会形成错误;
  2. 否则,如果e是x值,则decltype(e)是T &&,其中T是e的类型;
  3. 否则,如果e是左值,则decltype(e)是T&,其中T是e的类型;
  4. 否则,decltype(e)是e的类型.

decltype(0 + 0)指定的类型是什么?

第1项不适用,2可能,但如果没有,则3不适用,4将是结果.那么,什么是xvalue,是0 + 0和xvalue?

§3.10p1:

xvalue("eXpiring"值)也指对象,通常接近其生命周期的末尾(例如,可以移动其资源).xvalue是涉及rvalue引用的某些表达式的结果(8.3.2).

我在§8.3.2中没有看到任何有用的内容,但我知道"0 + 0"不涉及任何右值引用.文字0是一个prvalue,它是"一个不是xvalue的rvalue"(§3.10p1).我相信"0 + 0"也是一个prvalue.如果这是真的,"decltype(0 + 0)"将是int(不是int &&).

我的解释错过了什么吗?这段代码是否格式良好?

decltype(0 + 0) x;  // Not initialized.
Run Code Online (Sandbox Code Playgroud)

该代码编译在GCC 4.7.0 20110427和Clang 2.9(主干126116)上.例如,如果decltype指定了int &&类型,那么它将不会格式良好.

c++ rvalue decltype xvalue c++11

14
推荐指数
3
解决办法
1208
查看次数

为什么允许通过基类的指针调用派生类的私有虚方法?

# include <iostream>
using namespace std;

class A
{
    public:
    virtual void f()
    {
        cout << "A::f()" << endl;
    }
};
class B:public A
{
    private:
    virtual void f()
    {
        cout << "B::f()" << endl;
    }
};
int main()
{
    A *ptr = new B;
    ptr->f();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码正常工作并打印B :: f().我知道它是如何工作的,但为什么允许这个代码呢?

c++ virtual inheritance access-specifier

13
推荐指数
1
解决办法
2545
查看次数