小编Umm*_*mma的帖子

符号\ 0在字符串文字中的含义是什么?

考虑以下代码:

char str[] = "Hello\0";
Run Code Online (Sandbox Code Playgroud)

str数组的长度是多少,它的结尾是多少?

c c++ string escaping string-literals

50
推荐指数
4
解决办法
20万
查看次数

如果我们已经拥有RVO,那么移动语义会提供什么优化?

据我所知,添加移动语义的目的之一是通过调用特殊构造函数来复制"临时"对象来优化代码.例如,在这个答案中我们看到它可以用来优化这些string a = x + y东西.因为x + y是一个rvalue表达式,所以我们只能复制指向字符串的指针和字符串的大小,而不是深度复制.但正如我们所知,现代编译器支持返回值优化,因此不使用移动语义,我们的代码根本不会调用复制构造函数.

为了证明这一点,我写了这段代码:

#include <iostream>

struct stuff
{
        int x;
        stuff(int x_):x(x_){}
        stuff(const stuff & g):x(g.x)
        {
                std::cout<<"copy"<<std::endl;
        }
};   
stuff operator+(const stuff& lhs,const stuff& rhs)
{
        stuff g(lhs.x+rhs.x);
        return g;
}
int main()
{
        stuff a(5),b(7);
        stuff c = a+b;
}
Run Code Online (Sandbox Code Playgroud)

在VC++ 2010中执行它并在优化模式下执行g ++后,我得到空输出.

它是什么样的优化,如果没有它,我的代码仍然可以更快地运行?你能解释一下我的理解错误吗?

c++ optimization move-semantics c++11

32
推荐指数
3
解决办法
5285
查看次数

C++与D,Ada和Eiffel(模板的可怕错误消息)

C++的一个问题是我们从密集使用模板和模板元编程的代码中获得的可怕错误消息.这些概念旨在解决这个问题,但遗憾的是它们不会出现在下一个标准中.

我想知道,这个问题是否适用于支持通用编程的所有语言?或者C++模板出了什么问题?

不幸的是,我不知道任何其他支持泛型编程的语言(Java和C#泛型太简单了,没有C++模板那么强大).

所以我问你们:D,Ada,Eiffel模板(仿制药)是否也会产生如此丑陋的错误消息?是否可以使用具有强大通用编程范例的语言,但没有丑陋的错误消息?如果是,这些语言如何解决这个问题?

编辑:为downvoters.我真的很喜欢C++和模板.我不是说模板很糟糕.实际上我是泛型编程和模板元编程的忠实粉丝.我只是问为什么我从编译器那里收到如此丑陋的错误信息.

c++ templates d ada generic-programming

25
推荐指数
5
解决办法
3714
查看次数

constexpr与纯函数之间的关系

我是对的,那个:

  • 定义的任何函数constexpr都是纯函数,和
  • constexpr如果编译器的价格不是很高,那么任何纯函数都可以并且必须定义.

如果是这样,为什么不<cmath>定义函数constexpr

c++ constexpr c++11

19
推荐指数
3
解决办法
2598
查看次数

C++ 0x中的Unicode支持

我正在尝试在C++ 0x中使用新的unicode字符.所以我写了示例代码:

#include <fstream>
#include <string>
int main()
{
    std::u32string str = U"Hello World";

    std::basic_ofstream<char32_t> fout("output.txt");

    fout<<str;  
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是在执行这个程序后,我得到了空的output.txt文件.那么为什么它不打印Hello World?

也有一些像cout,并cin为这些类型已经定义,或stdinstdout不支持Unicode?

编辑:我正在使用g ++和Linux.

编辑:АТТЕNTION.我发现,标准委员会驳回了来自C++ 0x的Unicode流.所以以前接受的答案不再正确.欲了解更多信息,请参阅我的答案!

c++ unicode stream c++11

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

使用Qt Creator的C++ 0x

我正在尝试在Windows(Qt Creator 2.0.1)下的Qt Creator中使用新的C++ 0x功能.

在Qt,Qt Creator和QMake中阅读了配置GCC编译器开关的线程并添加QMAKE_CXXFLAGS += -std=c++0x到.pro文件中.

之后,Qt Creator在这个简单的代码上给出了非常奇怪的错误:

#include <memory>

int main()
{
}
Run Code Online (Sandbox Code Playgroud)

编译器错误:

':: swprintf'尚未申报

':: vswprintf'尚未宣布

我尝试使用命令从命令行编译我的代码g++ test.cpp --std=c++0x并得到相同的错误.

那么Qt MinGW编译器有什么问题?是否可以在Qt Creator中使用C++ 0x功能?

c++ qt mingw qt-creator c++11

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

如果新的失败怎么办?

在C++和C#中,当新的无法分配内存时,它会抛出异常.

我找不到有关Java中新行为的任何信息.那么如果新的Java失败(没有足够的内存)会发生什么?

java memory-management

12
推荐指数
1
解决办法
4223
查看次数

新的或新的[]运算符

考虑以下代码:

typedef  SomeType type_t[2];
SomeType * arr1 = new type_t; //new or new[] ???
type_t * arr2 = new type_t[3]; //new or new[] ???
Run Code Online (Sandbox Code Playgroud)

根据标准,new在第一和第二案例(newnew[])中将调用哪个版本以及如何删除arr1arr2(使用deletedelete[])?

c++ new-operator delete-operator

8
推荐指数
1
解决办法
427
查看次数

C++ 0x中没有Unicode流吗?为什么?

今天我发现,C++标准委员会已经在第二次修订版中驳回了C++ 0x中的Unicode流支持.更多信息请参阅问题.

根据这份文件:

忽略两种新类型的流特化的基本原理是非特征类型的流没有被广泛使用,因此不清楚是否真的需要将这种非常复杂的机器的专业化数量加倍.

这个采访斯特劳斯:

显然,我们应该在标准库中拥有Unicode流和其他大量扩展的Unicode支持.委员会知道,但没有任何人有技能和时间来完成工作,所以不幸的是,这是你必须寻找"第三方"支持的众多领域之一.

我不是Unicode的专家,我想知道为什么实现Unicode流是如此困难?有什么问题呢?

c++ unicode io stream c++11

6
推荐指数
1
解决办法
833
查看次数

来自其他链接单元的垃圾

当我讨论这个话题时,我问自己以下问题。

是否存在翻译单元中一些未使用的代码将链接到 GCC 和 VC++ 等流行编译器的最终可执行代码(当然是在发布模式下)的情况?

例如假设我们有 2 个编译单元:

//A.hpp
//Here are declarations of some classes, functions, extern variables etc.
Run Code Online (Sandbox Code Playgroud)

以及源文件

//A.cpp
//defination of A.hpp declarations
Run Code Online (Sandbox Code Playgroud)

最后是主要的

//main.cpp
//including A.hpp library
#include "A.hpp"
//here we will use some stuff from A.hpp library, but not everything
Run Code Online (Sandbox Code Playgroud)

我的问题是。如果 main.cpp 中没有使用 A.hpp 中的所有内容怎么办?链接器是否会删除所有未使用的代码,或者在某些情况下,某些未使用的代码可以与可执行文件链接?

编辑:我对 G++ 和 VC++ 链接器感兴趣。

编辑:当然我的意思是在发布模式下。

编辑:我开始为这个问题提供赏金,以获得良好而完整的答案。我期待答案,它将解释在哪些情况下 g++ 和 VC++ 链接器链接垃圾以及它们能够从可执行文件中删除什么样的代码(不需要的函数、不需要的全局变量、不需要的类定义等...)以及为什么他们不能删除一些不需要的东西。

c++ optimization linker

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

功能类似于模板参数

任何人都可以解释我,如何编写模板参数boost::function,例如(例如boost::function<int (float,bool)>).什么是正确的语法?

我试试这个:

template <typename T (typename Arg1,typename Arg2)>
struct func{};
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

c++ templates

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