小编Mar*_*tin的帖子

如何禁止临时

对于Foo类,有没有办法在不给它命名的情况下禁止构造它?

例如:

Foo("hi");
Run Code Online (Sandbox Code Playgroud)

如果你给它一个名字,只允许它,如下所示?

Foo my_foo("hi");
Run Code Online (Sandbox Code Playgroud)

第一个的生命周期只是语句,第二个是封闭块.在我的用例中,Foo是测量构造函数和析构函数之间的时间.因为我从不参考局部变量,所以我常常忘记将其放入,并且意外地改变了生命周期.我想改为编译错误.

c++

107
推荐指数
8
解决办法
4076
查看次数

返回一堆值的接口

我有一个函数,它接受一个数字并返回那么多东西(比方说,整数).什么是最干净的界面?一些想法:

  1. 回来一个vector<int>.矢量将被复制多次,这是低效的.
  2. 回来一个vector<int>*.我的getter现在必须分配向量本身以及元素.有谁必须释放向量的所有常见问题,你不能分配一次并使用相同的存储器来进行对getter的许多不同调用等.这就是为什么STL算法通常避免分配内存,而是想要它传入了.
  3. 回来一个unique_ptr<vector<int>>.现在很清楚是谁删除了它,但我们还有其他问题.
  4. 以a vector<int>作为参考参数.getter可以push_back()和调用者决定是否到reserve()空间.但是,如果传入vector非空,那么getter应该怎么做?附加?通过先清除它来覆盖?断言它是空的?如果函数的签名只允许一个解释,那将是很好的.
  5. 传递一个beginend迭代器.现在我们需要返回实际写入的项目数(可能小于预期),并且调用者需要注意不要访问从未写入的项目.
  6. 让吸气者接受iterator,呼叫者可以通过insert_iterator.
  7. 放弃,只是通过一个char *.:)

c++ c++11 c++98

27
推荐指数
2
解决办法
1794
查看次数

如何将Ruby方法转换为块?

有没有办法简化以下代码?

filenames是文件名(字符串)的列表,例如["foo.txt","bar.c","baz.yaml"]

filenames.map { |f| File.size(f) }
Run Code Online (Sandbox Code Playgroud)

有没有办法将"File.size"变成proc或block?对于现有对象的方法,我可以做到&:method.模块级方法有类似的东西吗?

ruby styles pointfree

17
推荐指数
2
解决办法
4336
查看次数

Bash以命令退出代码为条件

在bash中,我想说"如果文件不包含XYZ,那么"做一堆事情.将其转换为代码的最自然方式是:

if [ ! grep --quiet XYZ "$MyFile" ] ; then
   ... do things ...
fi
Run Code Online (Sandbox Code Playgroud)

但是,当然,这不是有效的Bash语法.我可以使用反引号,但之后我将测试文件的输出.我能想到的两个选择是:

grep --quiet XYZ "$MyFile"
if [ $? -ne 0 ]; then
   ... do things ...
fi
Run Code Online (Sandbox Code Playgroud)

grep --quiet XYZ "$MyFile" ||
   (  ... do things ...
   )
Run Code Online (Sandbox Code Playgroud)

我更喜欢第二个,它更像是Lispy和|| 控制流程在脚本语言中并不常见.我也可以看到第一个的参数,虽然当人们读到第一行时,他们不知道你为什么要执行grep,看起来你正在执行它的主要效果,而不仅仅是控制一个脚本分支.

是否有第三种更直接的方式使用一种if陈述并具有grep条件?

bash

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

在bash readline中,如何使增量搜索大小写不敏感

在bash提示符下,我可以输入Ctrl-r和Ctrl-s来执行命令历史记录的增量搜索.但是,搜索区分大小写:如果我有一个命令"cat SomeFile.txt",并且我点击"Ctrl-r somefile",我什么也得不到.

有没有办法让搜索不区分大小写?

bash readline

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

Scala:如何使用变量参数列表定义匿名函数?

在Scala中,如何定义一个带有可变数量参数的匿名函数?

scala> def foo = (blah:Int*) => 3
<console>:1: error: ')' expected but identifier found.
       def foo = (blah:Int*) => 3
                          ^
Run Code Online (Sandbox Code Playgroud)

scala anonymous-function

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

在C++ 11(或更高版本)中从字节数组反序列化对象的无定义行为方式是什么?

为了克服对齐问题,我需要记忆成一个临时的.临时的那种类型是什么?gcc抱怨以下reinterpret_cast将破坏严格的别名规则:

template <typename T>
T deserialize(char *ptr) {
    static_assert(std::is_trivially_copyable<T>::value, "must be trivially copyable");
    alignas(T) char raw[sizeof(T)];
    memcpy(raw, ptr, sizeof(T));
    return *reinterpret_cast<T *>(raw);
}
Run Code Online (Sandbox Code Playgroud)

(例如,当T为"长"时).

我不想定义T,因为我不想在覆盖之前构造T.

在一个联合中,不写一个成员然后读另一个计数作为未定义的行为?

template<typename T>
T deserialize(char *ptr) {
    union {
        char arr[sizeof(T)];
        T obj;
    } u;

    memcpy(u.arr, ptr, sizeof(T));   // Write to u.arr
    return u.obj;   // Read from u.obj, even though arr is the active member.
}
Run Code Online (Sandbox Code Playgroud)

c++ strict-aliasing c++11

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

如何使用unordered_map,其中值类型是它所在的类?

这段代码:

class Foo {
    std::unordered_map<std::string, Foo> x;
};
Run Code Online (Sandbox Code Playgroud)

给我一个错误:

/usr/include/c++/4.7/bits/stl_pair.h:94:11:
  error: 'std::pair<_T1, _T2>::second' has incomplete type
foo.cpp:4:7: error: forward declaration of 'class Foo'
Run Code Online (Sandbox Code Playgroud)

但是,这段代码编译得很好:

class Foo {
    std::vector<Foo> x;
};
Run Code Online (Sandbox Code Playgroud)

这是库/编译器错误吗?

c++

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

C++标准在哪里描述了对基元指针的转换?

在优秀博客文章"每个程序员应该知道的未定义行为"中,"违规类型规则"部分说:

将int*转换为float*并取消引用它(访问"int"就好像它是"float")是未定义的行为.C要求通过memcpy进行这些类型的转换:使用指针强制转换不正确并导致未定义的行为.对此的规则是非常细微的,我不想在这里详细说明(char*有例外,向量有特殊属性,工会改变事物等).

我想了解他们完全细微差别的规则.他们在C++ 11规范中的位置是什么?或者失败了,C规格(C90,C99,C11)?

这个Stack Overflow问题 N3485中链接的C++ 11规范中,我正在查看5.2.10"Reinterpret cast",但是没有看到char*或union的异常语言.所以这可能不是正确的地方.那么正确的地方在哪里?

c++ casting language-lawyer

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

成员函数的decltype

如何在以下示例中获取成员函数的返回类型?

template <typename Getter>
class MyClass {
   typedef decltype(mygetter.get()) gotten_t;
 ...
};
Run Code Online (Sandbox Code Playgroud)

当然,问题在于我在定义MyClass时没有"mygetter"对象.

我要做的是:我正在创建一个缓存,它可以使用getter返回的内容作为密钥.

c++ decltype c++11

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