小编del*_*rst的帖子

为什么C++ 11类内初始值设定项不能使用括号?

例如,我不能这样写:

class A
{
    vector<int> v(12, 1);
};
Run Code Online (Sandbox Code Playgroud)

我只能写这个:

class A
{
    vector<int> v1{ 12, 1 };
    vector<int> v2 = vector<int>(12, 1);
};
Run Code Online (Sandbox Code Playgroud)

对C++ 11语言设计的差异有何考虑?

c++ c++11

29
推荐指数
2
解决办法
2584
查看次数

"= default"析构函数和空析构函数之间有什么区别?

我想阻止我的类的用户将它用作自动变量,所以我编写如下代码:

class A {
private:
  ~A() = default;
};

int main() {
  A a;
}
Run Code Online (Sandbox Code Playgroud)

我希望代码不会被编译,但是g ++编译它没有错误.

但是,当我将代码更改为:

class A {
private:
  ~A(){}
};

int main() {
  A a;
}
Run Code Online (Sandbox Code Playgroud)

现在,g ++给出了~A()私有的错误,这是我的期望.

"= default"析构函数和空析构函数之间有什么区别?

c++ destructor private class c++11

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

GCC如何处理变量重定义

我写了一段这样的代码

int a;
int a = 100;
int main()
{
}
Run Code Online (Sandbox Code Playgroud)

它由GCC成功编译,但不是由G ++编译.

我猜GCC通过忽略变量a的第一个定义来处理这个问题.但我想知道准确的规则,这样我就不会错过任何东西.

谁能帮我吗?

c c++ gcc g++

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

模板中rvalue引用和const左值引用之间的重载

我想基于参数是否是临时对象来重载两个函数,所以我编写如下代码:

#include <iostream>

void f(int &&)
{
  std::cout << "&&" << std::endl;
}

void f(const int&)
{
  std::cout << "const &" << std::endl;
}

int main()
{
  int i;
  f(i);
  f(i + 1);
}
Run Code Online (Sandbox Code Playgroud)

它正确地输出:

const &
&&
Run Code Online (Sandbox Code Playgroud)

但是,当我更改代码以使用这样的模板时:

#include <iostream>

template <typename T>
void f(T &&)
{
  std::cout << "&&" << std::endl;
}

template <typename T>
void f(const T&)
{
  std::cout << "const &" << std::endl;
}

int main()
{
  int i;
  f(i);
  f(i + 1);
}
Run Code Online (Sandbox Code Playgroud)

输出变为:

&& …
Run Code Online (Sandbox Code Playgroud)

c++ templates rvalue-reference c++11

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

当我使用带整数的C++数学函数时,我是否应该担心精度?

例如,由于浮点数的精度,下面的代码会产生不希望的结果.

double a = 1 / 3.0;
int b = a * 3;      // b will be 0 here
Run Code Online (Sandbox Code Playgroud)

我想知道如果我使用数学函数会出现类似的问题.例如

int a = sqrt(4);       // Do I have guarantee that I will always get 2 here?
int b = log2(8);       // Do I have guarantee that I will always get 3 here?
Run Code Online (Sandbox Code Playgroud)

如果没有,如何解决这个问题?

编辑:

实际上,当我为算法任务编程时,我遇到了这个问题.在那里,我想得到

最大的整数,是2的幂,小于或等于整数N.

所以圆函数无法解决我的问题.我知道我可以通过循环来解决这个问题,但它似乎不是很优雅.

我想知道是否

int a = pow(2, static_cast<int>(log2(N)));
Run Code Online (Sandbox Code Playgroud)

总能给出正确的结果.例如,如果N == 8,log2(N)有可能给出类似于2.9999999999999的内容,最终结果是4而不是8吗?

c++ algorithm math floating-point floating-accuracy

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

为什么C99为复杂类型添加关键字?

我发现C99添加_Complex了支持复杂算术.但是,我想知道为什么C99为这样一个与字段相关的功能添加新关键字(仅对科学计算有用).通过标准库支持复杂类型不是更好吗?

c c99

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