小编Jes*_*ood的帖子

什么是std :: iota代表什么?

我假设"i"是增量而"a"是指定的,但我无法弄清楚或找到答案.此外,它看起来非常类似于itoa我认为令人困惑的非标准.

c++ naming-conventions c++11

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

使用非静态数据成员和嵌套类构造函数的类内初始化时出错

以下代码非常简单,我希望它应该编译好.

struct A
{
    struct B
    {
        int i = 0;
    };

    B b;

    A(const B& _b = B())
        : b(_b)
    {}
};
Run Code Online (Sandbox Code Playgroud)

我用g ++版本4.7.2,4.8.1,clang ++ 3.2和3.3测试了这段代码.除了g ++ 4.7.2对此代码的段错误(http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57770)之外,其他经过测试的编译器提供的错误消息并不能解释太多.

g ++ 4.8.1:

test.cpp: In constructor ‘constexpr A::B::B()’:
test.cpp:3:12: error: constructor required before non-static data member for ‘A::B::i’ has been parsed
     struct B
            ^
test.cpp: At global scope:
test.cpp:11:23: note: synthesized method ‘constexpr A::B::B()’ first required here 
     A(const B& _b = B())
                       ^
Run Code Online (Sandbox Code Playgroud)

clang ++ 3.2和3.3:

test.cpp:11:21: error: defaulted …
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer c++11

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

如何使用Intel语法中的clang生成汇编代码?

正如这个问题所示,使用g ++,我能做到g++ -S -masm=intel test.cpp.另外,对于clang,我可以这样做clang++ -S test.cpp,但-masm=intelclang(warning argument unused during compilation: -masm=intel)不支持.如何使用clang获取intel语法?

c++ x86 assembly intel clang

58
推荐指数
3
解决办法
4万
查看次数

为什么Java没有像C++那样的初始化列表?

在C++中,您可以使用初始化列表在构造函数开始运行之前初始化类的字段.例如:

Foo::Foo(string s, double d, int n) : name(s), weight(d), age(n) {
    // Empty; already handled!
}
Run Code Online (Sandbox Code Playgroud)

我很好奇为什么Java没有类似的功能.根据Core Java:第1卷:

C++使用这种特殊语法来调用字段构造函数.在Java中,不需要它,因为对象没有子对象,只有指向其他对象的指针.

这是我的问题:

  1. 它们是什么意思"因为对象没有子对象?" 我不明白子对象是什么(我试着查找它); 它们是指扩展超类的子类的实例化吗?

  2. 至于为什么Java没有像C++这样的初始化列表,我认为原因是因为所有字段在Java中都已默认初始化,并且因为Java使用super关键字来调用super(或C++语言中的基础) - 类构造函数.它是否正确?

c++ java constructor initialization initialization-list

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

函数声明后的" - >"是什么?

在一个系统头文件中,我看到如下表达式:

auto create_task(_Ty _Param) -> task<typename details::_TaskTypeFromParam<_Ty>::_Type>
{...}
Run Code Online (Sandbox Code Playgroud)

我不知道" - >"是什么意思,它不是指针表达式或lambda表达式,任何人都可以帮助我吗?

c++ c++11

34
推荐指数
1
解决办法
2115
查看次数

在同一个程序中混合cout和wcout

我正在阅读"C++ Cookbook",其中包含以下代码段:

// cout  << s  << std::endl;  // You shouldn't be able to
wcout << ws << std::endl;     // run these at the same time
Run Code Online (Sandbox Code Playgroud)

如果您对查看实际示例感兴趣,可以在此处找到Google图书页面的链接.

此外,我发现这个SO问题似乎表明混合wcout和cout是可以的.有人可以向我解释一下这个评论的内容吗?

编辑

从C++标准[27.4.1]:

对相应的宽字符和窄字符流的混合操作遵循与在FILE上混合此类操作相同的语义,如ISO C标准的修订1中所规定的.

从C标准[7.19.2]:

每个流都有一个方向.在流与外部文件关联之后,但在对其执行任何操作之前,该流没有方向.一旦将宽字符输入/输出功能应用于没有方向的流,该流就变为面向广泛的流.类似地,一旦将字节输入/输出功能应用于没有方向的流,该流就变成面向字节的流.只有调用freopen函数或fwide函数才能改变流的方向.(成功拨打freopen会删除任何方向.)

字节输入/输出功能不应用于面向广泛的流,宽字符输入/输出功能不应用于面向字节的流.

所以,标准似乎说你不应该混合它们.但是,我从这篇文章中找到了这句话:

对于Visual C++ 10.0,fwide函数被记录为未实现.从实际的角度来看,至少在输出整行的水平上,它显然可以很好地混合使用cout和wcout.因此,很高兴,Visual C++显然只是忽视了标准的要求,并没有维护一个不切实际的显式C FILE流方向.

而且,关于gcc,我从这里找到了这个引用:

这是一个(新的)功能,而不是一个bug,请参阅libstdc ++/11705,以及在C标准(C99,7.19)中的流方向搜索.简而言之,您不能混合面向字节和面向广泛的I/O. 目前,由于 libstdc ++/11705中指出的bug,你可以通过调用std :: ios :: sync_with_stdio(false)获得接近你期望的东西.在你的程序的开头.

c++

25
推荐指数
1
解决办法
6614
查看次数

什么是"原子"数据类型?

ATOMWin32api中遇到过类型,在Acrobat API中也遇到过ASAtom.

据我所知,原子是通常为字符串的哈希表的键,以便在应用程序之间快速查找和共享数据.这是正确的,原子类型的词源是什么?

编辑

经过一番广泛的搜索,我注意到Prolog使用了原子,所以这个词肯定有一些起源.它似乎用于指代任何单个数据.

c++ winapi types

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

当函数没有返回值时,返回类型应该是什么?

在过去,你可能有这样的功能:

const char* find_response(const char* const id) const;
Run Code Online (Sandbox Code Playgroud)

如果找不到该项,则可以返回null以指示该事实,否则显然返回相关的字符串.

但是当函数改为:

const std::string& find_response(const std::string& id) const;
Run Code Online (Sandbox Code Playgroud)

您返回什么表示未找到项目?

或者签名真的应该是:

bool find_response(const std::string& id, std::string& value) const;
Run Code Online (Sandbox Code Playgroud)

什么是最优雅的现代C++方式?

c++

17
推荐指数
2
解决办法
950
查看次数

在decltype中使用this指针

示例(编译好)

struct A
{
    void f() {};
    auto g() -> decltype(f())
    {}

};
Run Code Online (Sandbox Code Playgroud)

如果我this在decltype(ie decltype(this->f()))中添加指针,我会用gcc 4.7.0获得以下编译错误:

error: invalid use of incomplete type 'struct A'
error: forward declaration of 'struct A'
error: invalid use of incomplete type 'struct A'
error: forward declaration of 'struct A'
Run Code Online (Sandbox Code Playgroud)

是否this允许在decltype中使用?有人能帮我理解是什么问题吗?

编辑

这是作为一个错误提交的.

c++ gcc decltype c++11

16
推荐指数
1
解决办法
1239
查看次数

为什么锁定std :: mutex两次'Undefined Behavior'?

根据这篇文章:

如果您尝试从同一个线程锁定非递归互斥锁两次而不解锁,则会得到未定义的行为.

我天真的头脑告诉我他们为什么不回复错误?这有必要成为UB的原因吗?

c++ mutex undefined-behavior c++11

16
推荐指数
2
解决办法
5170
查看次数