小编Tob*_*ull的帖子

在没有lseek()的情况下编写和读取linux/proc/...文件系统

在这个源代码http://man7.org/tlpi/code/online/dist/sysinfo/procfs_pidmax.c.html中,/proc/sys/kernel/pid_max首先简单地读取该文件(使用read系统调用),然后简单地写入(使用write系统调用).

lseek在写作之前为什么没有必要到头开始?我认为文件偏移指针对于读取和写入是相同的(这是相关书籍的作者所说的).

c linux file read-write lseek

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

为什么std :: vector :: insert会在插入点之后使所有迭代器无效

insert进入std::vectorC++标准时,确保插入点之前的所有迭代器保持有效,只要capacity它没有用完(参见[23.2.4.3/1]或std :: vector迭代器失效).

在插入点保持有效(如果容量没有用尽)之后不允许迭代器的原因是什么?当然,他们会指向一个不同的元素,但(从假设的实现std::vector),仍然可以使用这样的迭代器(例如取消引用它或递增它).

c++ stdvector

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

<meta charset ="utf-8">声明自己文件的编码?

我读到HTML文件必须包含-element <meta charset="utf-8">中的head元素才能符合标准.

为什么在文件本身中指定文件的编码是有意义的?为了阅读meta元素,必须知道编码; 所以再次指定编码似乎是多余/无用的.

html character-encoding

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

在按值传递参数时,是否保证复制构造函数调用

有人向我建议,允许优化器在任何不修改参数的函数中自由地交换参数传递const引用和参数传递值.这是C++标准允许的吗?

或者在代码中说明不同

struct MyClass {
    MyClass(MyClass const& mc) { std::cout << "xxx" << std::endl; }
};

void foo(MyClass mc) { }

MyClass mc;
foo(mc);
Run Code Online (Sandbox Code Playgroud)

C++标准是否保证始终打印"xxx"?(参考标准赞赏)

c++

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

可选的<double>可以实现为8字节对象吗?

是否可以实现std :: optional,以便sizeof(std::optional<double>) == 8通过某种方式使用它可以将字符存储在NAN中,请参阅http://en.cppreference.com/w/cpp/numeric/math/nan?是否有实现这样做?它可以在标准中提供的功能方面完成吗?

c++ std optional boost-optional

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

创建包含字符序列的 nan 时,如何取回字符序列?

做的时候

const double d = std::nan ("Hello");
Run Code Online (Sandbox Code Playgroud)

你会得到一个包含字符串“Hello”的 NAN。如何从变量中退出这个字符串d?根本就没有标准的符合方式吗?如果无法取回字符串,此功能似乎没有什么意义。

c++ floating-point ieee-754

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

std :: experimental :: source_location在编译时

std::experimental::source_location可能会在某些时候添加到C++标准中.我想知道是否有可能将位置信息放入编译时领域.本质上,我想要一个从不同的源位置调用时返回不同类型的函数.像这样的东西,虽然它没有编译,因为location对象不是constexpr因为它是一个函数参数:

#include <experimental/source_location>

using namespace std::experimental;

constexpr auto line (const source_location& location = source_location::current())
{
  return std::integral_constant<int, location.line()>{};
}

int main()
{
  constexpr auto ll = line();
  std::cout << ll.value << '\n';
}
Run Code Online (Sandbox Code Playgroud)

这不会编译,有关于的消息

expansion of [...] is not a constant expression
Run Code Online (Sandbox Code Playgroud)

关于这return std::integral_constant<int, location.line()>{}条线.有什么好处它是有方法source_locationconstexpr,如果我不能使用它们?

c++ templates compile-time c++-experimental std-source-location

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

是否会在其他线程中始终以相同顺序看到对不同线程中不同位置的两次原子写操作?

与我之前的问题类似,请考虑以下代码

-- Initially --
std::atomic<int> x{0};
std::atomic<int> y{0};

-- Thread 1 --
x.store(1, std::memory_order_release);

-- Thread 2 --
y.store(2, std::memory_order_release);

-- Thread 3 --
int r1 = x.load(std::memory_order_acquire);   // x first
int r2 = y.load(std::memory_order_acquire);

-- Thread 4 --
int r3 = y.load(std::memory_order_acquire);   // y first
int r4 = x.load(std::memory_order_acquire);
Run Code Online (Sandbox Code Playgroud)

怪异的结果 r1==1, r2==0,并r3==2, r4==0有可能在C ++ 11内存模型下,这种情况下?如果我要全部替换std::memory_order_acq_rel成该std::memory_order_relaxed怎么办?

在x86上,这样的结果似乎是被禁止的,请参见此SO问题,但我一般是在询问C ++ 11内存模型。

奖励问题:

我们都同意,与std::memory_order_seq_cst怪异的结果不会在C ++ 11被允许。现在,赫伯·萨特(Herb Sutter)在他著名的- …

c++ concurrency memory-model c++11 stdatomic

4
推荐指数
3
解决办法
540
查看次数

原子<T> .load()与std :: memory_order_release

在编写使用新引入的线程同步原语的C++ 11代码时,您可以使用轻松的内存排序

std::atomic<int> vv;
int i = vv.load(std::memory_order_acquire);
Run Code Online (Sandbox Code Playgroud)

要么

vv.store(42, std::memory_order_release);
Run Code Online (Sandbox Code Playgroud)

我很清楚为什么这是有道理的.

我的问题是:你的组合vv.store(42, std::memory_order_acquire)vv.load(std::memory_order_release)也有意义吗?在哪种情况下可以使用它们?这些组合的语义是什么?

multithreading atomicity c++11

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

使用“表达式 SFINAE”时如何获得普通“auto”返回类型的行为?

考虑以下代码。

struct Widget {
    int& get();
};

template<typename X>
auto func_1(X& x) {
  return x.get();
}

template<typename X>
auto func_2(X& x) -> decltype(x.get()) {
  return x.get();
}
Run Code Online (Sandbox Code Playgroud)

当使用 type 的左值调用时Widget,该函数func_1将使用返回类型进行实例化int,其中函数func_2将具有返回类型int&

func_1另外,和之间存在差异,func_2因为“表达式 SFINAE”是针对 执行的func_2。因此,对于X没有.get()成员的类型,func_2将不会参与重载决策。

我的问题是:我们如何func_1在执行表达式 SFINAE 的同时获得返回类型行为?

以下func_3似乎适用于我测试的情况,但我觉得应该有一个更简单的替代方案。另外,我不确定是否func_3具有与所有情况下完全相同的返回类型func_1

template<typename X>
auto func_3(X& x) -> std::remove_cvref_t<std::decay_t<decltype(x.get())>> {
  return x.get();
}
Run Code Online (Sandbox Code Playgroud)

c++ templates sfinae overload-resolution

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

vprintf是如何实现的?

如果想在C中编写一个函数,将一个变量参数列表传递给printf一个必须使用该vprintf版本的函数.如何为自定义函数实现此机制?

换句话说,如何是什么套的精髓vprintf除了printf在符合标准的C语言实现?

c variadic-functions

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

C++:如何编写一个要求构造函数为 noexcept 的概念?

如何编写一个要求类具有noexcept构造函数的概念?例如,以下内容static_assert在 Clang 15.0.7 中是正确的,尽管我觉得不应该。

class Ragdoll {
    int age_ = -1;
public:
    Ragdoll(int age) /* noexcept */ : age_(age) {}

    int meow() const;
    int lose_hair();
};

template<typename Cat>
concept cat = requires(Cat cat) {
    noexcept(Cat{42});
    { cat.meow() } -> std::same_as<int>;
};

static_assert(cat<Ragdoll>);
Run Code Online (Sandbox Code Playgroud)

noexcept那么这个表达式在概念中到底在做什么呢?(也请随意链接任何好的概念教程)

c++ noexcept c++-concepts c++20

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