在这个源代码http://man7.org/tlpi/code/online/dist/sysinfo/procfs_pidmax.c.html中,/proc/sys/kernel/pid_max首先简单地读取该文件(使用read系统调用),然后简单地写入(使用write系统调用).
lseek在写作之前为什么没有必要到头开始?我认为文件偏移指针对于读取和写入是相同的(这是相关书籍的作者所说的).
当insert进入std::vectorC++标准时,确保插入点之前的所有迭代器保持有效,只要capacity它没有用完(参见[23.2.4.3/1]或std :: vector迭代器失效).
在插入点保持有效(如果容量没有用尽)之后不允许迭代器的原因是什么?当然,他们会指向一个不同的元素,但(从假设的实现std::vector),仍然可以使用这样的迭代器(例如取消引用它或递增它).
我读到HTML文件必须包含-element <meta charset="utf-8">中的head元素才能符合标准.
为什么在文件本身中指定文件的编码是有意义的?为了阅读meta元素,必须知道编码; 所以再次指定编码似乎是多余/无用的.
有人向我建议,允许优化器在任何不修改参数的函数中自由地交换参数传递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"?(参考标准赞赏)
是否可以实现std :: optional,以便sizeof(std::optional<double>) == 8通过某种方式使用它可以将字符存储在NAN中,请参阅http://en.cppreference.com/w/cpp/numeric/math/nan?是否有实现这样做?它可以在标准中提供的功能方面完成吗?
做的时候
const double d = std::nan ("Hello");
Run Code Online (Sandbox Code Playgroud)
你会得到一个包含字符串“Hello”的 NAN。如何从变量中退出这个字符串d?根本就没有标准的符合方式吗?如果无法取回字符串,此功能似乎没有什么意义。
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_location是constexpr,如果我不能使用它们?
c++ templates compile-time c++-experimental std-source-location
与我之前的问题类似,请考虑以下代码
-- 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++ 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)也有意义吗?在哪种情况下可以使用它们?这些组合的语义是什么?
考虑以下代码。
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中编写一个函数,将一个变量参数列表传递给printf一个必须使用该vprintf版本的函数.如何为自定义函数实现此机制?
换句话说,如何是什么套的精髓vprintf除了printf在符合标准的C语言实现?
如何编写一个要求类具有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++ ×8
c ×2
c++11 ×2
templates ×2
atomicity ×1
c++-concepts ×1
c++20 ×1
compile-time ×1
concurrency ×1
file ×1
html ×1
ieee-754 ×1
linux ×1
lseek ×1
memory-model ×1
noexcept ×1
optional ×1
read-write ×1
sfinae ×1
std ×1
stdatomic ×1
stdvector ×1