小编Xle*_*lea的帖子

在TeX内联数学中防止Emacs进行换行

我将Emacs与AUCTeX结合使用,使用大量的内联数学编辑手稿$.当自动填充(例如,有M-q)时,Emacs经常在扰乱阅读流畅性的位置(例如,在下标等中)打破这些内联数学环境.

有没有办法告诉Emacs更愿意将整个$…$环境放在一个新的行中,如果这样可以防止破坏?更具体地说,如果发生数学中断,则应将整个环境移动到不应该分开的新行.

一个例子:

Lorem ipsum dolor sit amet, consectetur adipisici elit, sed $a^2 + b^2 = c^2$ eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.
Run Code Online (Sandbox Code Playgroud)

应该导致

Lorem ipsum dolor sit amet, consectetur adipisici elit, sed
$a^2 + b^2 = c^2$ eiusmod tempor incidunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam.
Run Code Online (Sandbox Code Playgroud)

emacs math-mode auctex

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

std :: string :: reserve和end-of-string 0

当使用pre预分配时std::string::reserve,我必须明确添加一个用于终止0,以避免重新分配和后续复制?

例如,知道"Hello"长度为5 的字符串将被存储std::string str,我是否必须调用str.reserve(6)

如果我正确地阅读了标准,那么我认为答案应该是肯定的.因为reserve它说

在reserve()之后,capacity()大于或等于reserve的参数.

capacity反过来它规定

返回:字符串中已分配存储的大小.

不过,我不熟悉标准中配方的细微之处,我想证实我的怀疑.

c++ stdstring dynamic-memory-allocation

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

stlen :: string的strlen(str.c_str())和str.length()之间的区别

作为一种隐含的理解,我一直认为std::string必须满足strlen(str.c_str()) == str.length()每个字符串的每个实现str.

C++标准对此有何看法?(可以?)

背景:至少Visual C++和gcc附带的实现没有此属性.考虑这个例子(参见这里的实例):

// Output:
// string says its length is: 13
// strlen says: 5
#include <iostream>
#include <cstring>
#include <string>

int main() {
  std::string str = "Hello, world!";
  str[5] = 0;
  std::cout << "string says its length is: " << str.length() << std::endl;
  std::cout << "strlen says: " << strlen(str.c_str()) << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当然,没有str注意到的写入操作导致"问题".但这不是我的问题.我想知道关于这种行为的标准.

c++ string stl

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

每当表达式未定义时,在C++中启用函数模板

每当一些表达可以函数模板被启用的未定义(例如,x类型t流传送的对std::cout).就像是

template<typename t>
auto f(const t &x) 
  -> typename enable_if_undefined<decltype(std::cout << x)>::type;
Run Code Online (Sandbox Code Playgroud)

使用SFINAE,我只看到如果定义表达式时如何启用,但是如果表达式未定义则不知道如何执行.

c++ templates metaprogramming sfinae c++11

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

C++ 中是否可以强制显式向上转换

假设A源自B. B *x = new A()例如,是否有一种方法可以通过进行必要的显式强制转换来禁止像 中那样的隐式向上强制转换?

c++ casting explicit

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

使用 `std::vector` 作为模板模板参数的默认值

假设foo是一个采用容器类型的模板,它本身有一个模板参数来指定其值的类型:

template <template<typename val_t> class container_t>
struct foo;
Run Code Online (Sandbox Code Playgroud)

为方便起见,foostd::vector作为默认容器。问题是std::vector形式上有两个参数,其中第二个有默认值。这意味着... container = std::vector不起作用。

C++11 的解决方案是定义模板别名:

template<typename val_t> using vec_dummy = std::vector<val_t>;
template <template<typename val_t> class container_t = vec_dummy>
struct foo;
Run Code Online (Sandbox Code Playgroud)

我不喜欢,为了可读性(你必须搜索vec_dummy)和审美原因(没有理由命名那种类型)。

有没有办法以某种方式匿名定义模板别名?其他解决问题的方法当然也受到热烈欢迎。

PS:实际上,foo使用内部数据类型作为提供的容器的值类型,所以

template <typename container_t = std::vector<int>> struct foo;
Run Code Online (Sandbox Code Playgroud)

不是一个选择。

templates anonymous-types optional-parameters c++11

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