小编Dre*_*ann的帖子

可以使用非静态函数在c ++中修改静态变量

can非静态函数可以在c ++中修改静态变量

c++

6
推荐指数
2
解决办法
7967
查看次数

C++对静态const积分类型有什么特殊规则?

我的印象是C++将相同的特殊规则应用于static const整数类型,无论是在命名空间范围内声明还是在类/结构/联合中声明.

现在我想我已经被不合规的编译器教给了Bad Things.

static const int A = 1;

struct s
{
    static const int A = 1;
};
Run Code Online (Sandbox Code Playgroud)

除了明显的范围差异,如何做As::A有所不同?

  • ......当他们的用法被替换为他们的字面值?
  • ......什么时候可以拿到它的地址?
  • ......当我需要单独定义它们时?

我特别好奇C++ 03.

c++ standards static const

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

什么时候C++隐式类型初始化为0?

在与同事讨论之后我对此产生了一些怀疑......

正如标题所要求的那样,何时可以假设内置类型将被初始化为0而不是未知值?

规则是否因c ++标准而异?

c++ initialization built-in-types

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

为什么在Visual Studio中使用LLVM + Clang时没有定义__clang__?

我安装了适用于Windows的LLVM,其中包括Clang和其他一些工具.它与Visual Studio集成,甚至可以让我在项目属性中选择"Platform Toolset".但是,当我选择LLVM附带的任何工具集时,__clang__未定义,_MSC_VER而是定义.__clang__在Visual Studio中使用LLVM和Clang时如何定义?

我的Visual Studio版本是2015年的预览(不过我也测试了2013没有成功要么),和我LLVM版本是基于关闭SVN的释放225473.我试过LLVM-vs2012,LLVM-vs2013以及LLVM-vs2014为平台工具集没有成功.

c++ llvm clang visual-studio visual-studio-2015

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

假定已知长度的模板参数包之后的可选参数

我试图拥有一种最后带有可选参数的“调用”函数:

template <typename... T>
void foo(void func(T...), T... args, int opt = 0)
{
    func(args...);
}

void bar(int, int);

int main()
{
    foo(&bar, 1, 2, 3);
}
Run Code Online (Sandbox Code Playgroud)

我本来希望这是可行的,因为参数包可以从第一个参数推导出来,但显然编译器有不同的想法:

例如,Clang 给出:

<source>:11:5: error: no matching function for call to 'foo'
    foo(&bar, 1, 2, 3);
    ^~~
<source>:2:6: note: candidate template ignored: deduced packs of different lengths for parameter 'T' (<int, int> vs. <>)
void foo(void func(T...), T... args, int opt = 0)
     ^
1 errors generated.
Compiler returned: 1
Run Code Online (Sandbox Code Playgroud)

为什么它会推导出长度为0的列表?args我可以为了扣除的目的而强制忽略它吗?或者更一般地说,我怎样才能做到这一点?

c++ templates optional-parameters variadic-templates

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

虚拟功能

我真的不明白 - 我什么时候应该使用虚拟功能?如果有人能向我解释,我会很高兴,谢谢.

c#

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

Boost.Multiprecision cpp_int - 转换为字节数组?

http://www.boost.org/doc/libs/1_53_0/libs/multiprecision/doc/html/index.html

我刚刚开始探索这个图书馆。似乎没有办法转换cpp_int成字节数组。

有人能看到这样的功能吗?

c++

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

单例模式:auto_ptr和unique_ptr的不同行为

在实现工厂类时,我遇到了std::auto_ptr一些我无法理解的行为.我将问题减少到下面的小程序,所以......让我们开始吧.

考虑以下单例类:

singleton.h

#ifndef SINGLETON_H_
#define SINGLETON_H_

#include<iostream>
#include<memory>

class singleton {
public:
  static singleton* get() {
    std::cout << "singleton::get()" << std::endl;
    if ( !ptr_.get() ) {
      std::cout << &ptr_ << std::endl;
      ptr_.reset( new singleton  );
      std::cout << "CREATED" << std::endl;
    }
    return ptr_.get();
  }

  ~singleton(){
    std::cout << "DELETED" << std::endl;
  }
private:
  singleton() {}
  singleton(const singleton&){}

  static std::auto_ptr< singleton > ptr_;
  //static std::unique_ptr< singleton > ptr_;
};

#endif
Run Code Online (Sandbox Code Playgroud)

singleton.cpp

#include<singleton.h>o
std::auto_ptr< singleton > singleton::ptr_(0);
//std::unique_ptr< singleton > …
Run Code Online (Sandbox Code Playgroud)

c++ linker singleton static auto-ptr

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

如何指定setprecision舍入

当流到std输出时,我可以指定setprecision来舍入double值吗?

ofile << std::setprecision(12) << total_run_time/TIME << "\n";
Run Code Online (Sandbox Code Playgroud)

输出: 0.756247615801

ofile << std::setprecision(6)<< total_run_time/TIME << "\n";
Run Code Online (Sandbox Code Playgroud)

输出: 0.756248

但我需要输出为 0.756247

谢谢

c++ floating-point

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

静态存储中的内联变量何时初始化?

C++ 标准(至少早于 C++17)已经说明了初始化顺序。

在同一翻译单元的命名空间范围内定义并动态初始化的静态存储持续时间的对象应按照其定义在翻译单元中出现的顺序进行初始化。

C++17 引入了内联变量,我相信这意味着可以在多个翻译单元中定义具有静态存储持续时间命名空间范围以及动态初始化的单个变量。

C++ 是否对这些变量的初始化顺序做出任何保证?

c++ initialization-order c++17 inline-variable

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