小编0x4*_*2D2的帖子

具有对象数组的默认复制行为

如果我有一个数组作为成员的类:

class A
{
    Object array[SIZE];
};
Run Code Online (Sandbox Code Playgroud)

我复制了它的一个实例:

A a;
A b = a;
A c;
c = a;
Run Code Online (Sandbox Code Playgroud)

array逐字节地进行memcpy-ed还是Object::operator=逐个元素复制?

c++ arrays copy-constructor copy-assignment

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

使用匿名模板类型混淆语法?

template <class T, class U> decltype(*(T*)(0) * *(U*)(0)) mul(T x, U y) {
   return x * y;
}
Run Code Online (Sandbox Code Playgroud)

这段代码取自Stroustrup的C++ 11 FAQ.我理解它的作用,它是两个不同类型的对象相乘.令我困惑的是模板参数和函数定义之间的语法.里面发生了什么decltype?我认为它取消引用一个T初始化为0的未命名U指针,并将它与一个未命名的指针相乘,并以相同的方式进行解引用和初始化.我对吗?

好吧,如果这是正在发生的事情,那么指针,解引用和额外括号的使用是不是多余的?我不能在保持预期效果的同时初始化这样的类型吗?:

template <class T, class U> decltype(T(0) * U(0)) mul(T x, U y) {
   return x * y;
}
Run Code Online (Sandbox Code Playgroud)

这对我来说看起来更干净,并且当像第一个那样乘以两个数字时它确实具有相同的效果......

mul(4, 3); // 12
Run Code Online (Sandbox Code Playgroud)

那么为什么Stroustrup坚持使用复杂的指针,解引用和初始化语法?当然,这是在他介绍新auto语法之前.但无论如何,我的问题是:上述两种形式的初始化之间有什么区别吗?他在哪里使用指针并立即取消引用它们而不是简单地做我所做的,这是用没有指针或解除引用来初始化类型?任何回应表示赞赏.

c++ c++11

5
推荐指数
2
解决办法
195
查看次数

使用基类的静态函数而不指定参数以避免歧义

我的一些基类获得了大量的参数.现在我想指定要使用的静态函数:

template <typename... Types>
struct SBase {
    static void func() {
    }
};

struct A : public SBase<int> {
};

struct B : public A, public SBase<int, double, short,
    unsigned int, float, unsigned char, long, unsigned long> {

    // using SBase::func; // Not possible.
    // Horrible, but works.
    using SBase<int, double, short,
    unsigned int, float, unsigned char, long, unsigned long>::func;
};
Run Code Online (Sandbox Code Playgroud)

您可以看到,我需要两次编写模板参数,这会导致代码重复.

有没有办法摆脱它?

c++ class-template c++11

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

G++:错误:无法识别的选项“-soname”

我正在尝试在 64 位 Ubuntu 12.04 上构建 SLitrani。我已经从源代码构建了 ROOT 5.34.03,我确实弄清楚了如何为 $ROOTDEV 设置 LD_LIBRARY_PATH 和 PATH 变量,所以问题不存在,但是当我尝试制作 SplineFit 时,我得到了

>>> g++: error: unrecognized option ‘-soname=libSplineFit.so’
make: *** [libSplineFit.so] Error 1
Run Code Online (Sandbox Code Playgroud)

我也没有改变所有-m32-m64在Makefile中,所以我不知道是怎么回事。我能够安装 TwoPad,但无法从 SplineFit 继续。我已经在这个版本上工作了很长一段时间,希望得到任何帮助。

g++

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

decltype中的可变参数模板包

我可以写作

template< class T0> struct Last0
{  
  using type = decltype(T0{}); // OK compiles. `type = T0`
};


template< class T0, class T1> struct Last1
{
    using type = decltype(T0{}, T1{}); // OK, compiles. `type = T1`
};

template< class T0, class T1, class T2> struct Last3{
   using type = decltype(T0{}, T1{}, T2{}); // Ok, compiles. `type = T2`
};
Run Code Online (Sandbox Code Playgroud)

但是,当我使用可变参数模板时,它不会被编译:

template< class ... T> struct Last{
   using type = decltype(T{} ... ); //<--- Error !!!
};
Run Code Online (Sandbox Code Playgroud)

什么问题?

c++ variadic-templates c++11

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

为什么我们需要在 getline(cin, string) 之前使用 cin.ignore() ?

为什么我们需要cin.ignore()在字符串中输入之前使用?

反手过程是怎样的?getline如果我们不使用 ,为什么它会跳过字符串中的输入(如果我们调用函数来获取更多变量) cin.ignore()

c++

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

打印空指针未定义行为?

在研究这个问题的示例代码时,我假设它是Undefined Behavior,它阻止了后续的std::cout打印使用.但事实证明,尝试打印空指针导致std::ios_base::badbitstd::ios_base::failbit设置在其流状态,这是其不可操作的真正原因.因此,我现在很好奇是否真的(尝试)打印空指针的未定义行为.所以这是我的问题:

  1. 打印空指针是未定义的行为吗?如果是这样,那么流插入器会导致什么呢?我非常确定插入器足够智能,不会取消引用空指针.

  2. 我还想知道为什么插入器在此上下文中遇到空指针时设置其错误掩码(具体而言badbit).为什么它不像字符串文字的终止那样对待它?

我没有标准的方便,到目前为止我只发现了一个来源,不幸导致了一个死链接.

c++ iostream null-pointer undefined-behavior

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

使用 clang 捕获设置但未使用的参数

有没有办法可以使用类似于 gcc 的 clang 来捕获已设置但未使用的变量Werror=unused-but-set-parameter?我设置了-Wunused但 clang 没有捕获设置但未使用的参数。

c c++ clang

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

§9.5/ 8中可能含糊不清的陈述

§9.5/ 9来自C++ 11标准(强调我的):

工会状类是联合或具有匿名联合作为直接成员的类.类似联合的类X具有一组变体成员.如果X是a union,则非静态数据成员X不是匿名联合,是其变体成员X.

是粗体的部分是说在类似联合的类之间是一个类还是一个联合,只有它是一个联合才能有一个不是匿名联合的非静态变体成员?如果是这样,为什么?它在代码中有什么实际区别?

我实际上质疑这句话是否意味着说"如果X是一个类似工会的阶级 ......".那对我来说完全合情合理.

无论哪种方式,这个条款在过去几天一直困扰着我,我希望完全理解它所说的内容.

c++ language-lawyer c++11

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

在cmake中从十进制转换为十六进制

Y:是否可以采用带有16位十进制的变量A并将其转换为10十六进制,反之亦然,在CMake中?

Google搜索只引导我进行以下操作:

http://public.kitware.com/pipermail/cmake/2008-September/024092.html

哪个不做转换.

X:我正在尝试使用"配置文件",将配置的值作为十进制读取,并在配置的头文件中将其输出为十六进制.

cmake

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