小编R. *_*des的帖子

如何在C++ 11中打印当前时间?

在C++ 11中是否有一种简单的方法可以使用与正在使用的ostream相关联的语言环境的相应格式规则来打印当前的挂起时间?

我真正想做的是这样的事情:

myStream << std::chrono::system_clock::now();
Run Code Online (Sandbox Code Playgroud)

并根据与之相关的任何区域设置打印日期和时间myStream.C++ 11提供put_time,但它需要格式化字符串,我希望格式由与流关联的语言环境确定.还有time_puttime_put_byname,但基于在cppreference.com的例子中,这些功能配合使用put_time.

有没有简单的方法来打印时间点值而不手动格式化它?

c++ locale c++11 c++-chrono

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

我怎样才能做一些像gf这样的事情,但是在一个新的垂直分裂?

在vim中gf打开名称在当前窗口中光标下的文件.<C-W>f做同样的事情,但在新窗口中打开它.但是,这个新窗口是使用水平拆分创建的.

我怎样才能做同样的事情并进行垂直分割?

我尝试了各种有效的替代方案(比如:vsplit +normal\ gf),但有一个小问题:如果文件不存在,无论如何都会创建一个新窗口.这不会发生gf,也不<C-W>f.我也希望从"垂直分割上的光标下打开文件"命令中获得此行为.我怎样才能做到这一点?

vim

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

变量模板作为模板参数:演绎适用于GCC但不适用于Clang

在用GCC 4.7.2和Clang 3.1编译一些C++ 11代码时,我遇到了一个问题,Clang没有设法推断出GCC成功的模板参数.在更抽象的形式中,代码如下所示:

SRC/test.cc:

struct Element {
};

template <typename T>
struct FirstContainer {
};

template <typename T, typename U = Element>
struct SecondContainer {
};

template <template <typename> class Container>
void processOrdinary(Container<Element> /*elements*/) {
}

template <template <typename, typename> class Container>
void processOrdinary(Container<Element, Element> /*elements*/) {
}

template <template <typename, typename...> class Container>
void processVariadic(Container<Element> /*elements*/) {
}

int main() {
  // This function instantiation works in both GCC and Clang.
  processOrdinary(FirstContainer<Element>{});
  // This function instantiation works in …
Run Code Online (Sandbox Code Playgroud)

c++ gcc clang variadic-templates c++11

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

从ifstream读取不会读取空格

我正在用C++实现一个自定义词法分析器,当试图读取空格时,ifstream将不会读取它.我正逐字逐句阅读>>,所有的空白都消失了.是否有任何方法可以让ifstream保留所有的空白并将其读出来给我?我知道在阅读整个字符串时,读取将停留在空白处,但我希望通过逐字逐句阅读,我会避免这种行为.

尝试:.get(),由许多答案推荐,但它具有相同的效果std::noskipws,即,我现在获得所有空格,但不是我需要的一些构造的新行字符.

这是违规代码(扩展评论被截断)

while(input >> current) {
    always_next_struct val = always_next_struct(next);
    if (current == L' ' || current == L'\n' || current == L'\t' || current == L'\r') {
        continue;
    }
    if (current == L'/') {
        input >> current;
        if (current == L'/') {
            // explicitly empty while loop
            while(input.get(current) && current != L'\n');
            continue;
        }
Run Code Online (Sandbox Code Playgroud)

我正在打破这一while行并查看其中的每个值current,\r或者\n肯定不在其中 - 输入只是跳到输入文件中的下一行.

c++ c++11

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

为什么arr和&arr一样?

我已经编程了很多年的c/c ++,但今天的偶然发现让我有点好奇......为什么两个输出在下面的代码中产生相同的结果?(arr当然是地址arr[0],即指向arr[0].我本来希望&arr是该指针的地址,但它具有相同的值arr)

  int arr[3];
  cout << arr << endl;
  cout << &arr << endl;
Run Code Online (Sandbox Code Playgroud)

备注:这个问题已经结束,但现在又被打开了.(谢谢 ?)

我知道&arr[0]arr评估相同的数字,但这不是我的问题!问题是为什么&arrarr评估相同的数字.如果arr是文字(不存储任何软件),那么编译器应该抱怨并说这arr不是左值.如果地址arr存储在某个地方,那么&arr应该给我该地点的地址.(但这种情况并非如此)

如果我写

const int*arr2 = arr;

那么arr2[i]==arr[i]对于任何整数i,但是&arr2 != arr.

c c++ pointers

21
推荐指数
4
解决办法
9031
查看次数

c32rtomb转换为什么编码?

这些函数c32rtombmbrtoc32来自C Unicode TR(草案)中的<cuchar>/ <uchar.h>描述为执行UTF-32 1和"多字节字符" 之间的转换.

(...)如果s不是空指针,则该c32rtomb函数确定表示与由c32 (包括任何移位序列)给出的宽字符对应的多字节字符所需的字节数,并将多字节字符表示存储在数组中,第一个元素是指向的s.(......)

什么是"多字节字符表示"?我实际上对以下程序的行为感兴趣:

#include <cassert>
#include <cuchar>
#include <string>

int main() {
    std::u32string u32 = U"this is a wide string";
    std::string narrow  = "this is a wide string";
    std::string converted(1000, '\0');
    char* ptr = &converted[0];
    std::mbstate_t state {};
    for(auto u : u32) {
        ptr += std::c32rtomb(ptr, u, &state);
    }
    converted.resize(ptr - &converted[0]);
    assert(converted == narrow);
}
Run Code Online (Sandbox Code Playgroud)

它中的断言是否保证保持 …

c++ unicode c++11

21
推荐指数
2
解决办法
703
查看次数

为什么C++ 11编译器支持仍需要标志?

我知道默认情况下不应该启用编程语言的实验性功能,所以我欢迎使用标志-std=c++0x-std=c++1y.但是,C++ 11现在已经成为标准.为什么编译器仍需要-std=c++11启用对其功能的支持?

c++ compiler-construction c++11

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

如何在Java中获取调用类的名称?

我想在这件事上提供一些帮助,

例:

public class A {

    private void foo() {

          //Who Invoked me

    }

}

public class B extends A { }

public class C extends A { }

public class D {

     C.foo();

}
Run Code Online (Sandbox Code Playgroud)

这基本上就是这种情况.我的问题是方法foo()怎么知道谁在调用它?

编辑:基本上我试图做一个数据库层,在类AI中将创建一个将生成SQL语句的方法.通过获取调用类的所有公共属性的值来动态生成此类语句.

java callstack

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

如何实例化不可变的相互递归对象?

我有一个不可变的递归类型:

public sealed class Foo
{
    private readonly object something;
    private readonly Foo other; // might be null

    public Foo(object something, Foo other)
    {
        this.something = something;
        this.other = other;
    }
    public object Something { get { return something; } }
    public Foo Other { get { return other; } }
}
Run Code Online (Sandbox Code Playgroud)

我需要实例化这种相互引用的两个对象,即a.Other == b && b.Other == a.

我不想放弃不变性不变量,因为Foo它旨在用作flyweight.我可以(并且我认为必须)放弃readonly这些字段,并保持"胆量"可变,但公共接口必须是不可变的.

冰棍不变性来完成这件事的唯一途径?

我正在尝试为一系列类型建模.每种类型都有一个名称和几个属性.每个属性都有一个名称和一个类型.有一些相互递归的类型,这就是出现这个问题的地方.

c# immutability

20
推荐指数
2
解决办法
1630
查看次数

std :: atomic <int>减量和比较

在以下代码中:

std::atomic<int> myint; //Shared variable
//(...)
if( --myint == 0) {
    //Code block B
}
Run Code Online (Sandbox Code Playgroud)

是否有可能多个线程访问名为"代码块B"的块?

请考虑溢出不会发生,'if'由多个线程同时执行,整个程序中对myint的唯一修改是if中的--myintmyint初始化为正值.

c++ concurrency multithreading atomicity c++11

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