小编Jes*_*Jes的帖子

重载C++ new运算符时的大小信息

C++内存分配运算符的形式为operator new (size_t s).当我new为类型的类对象重载运算符时T,它是否保证size_t s运算符的输入参数(即)new确切sizeof(T)?如果是,为什么这个函数仍然需要大小作为输入参数?

c++ operator-overloading new-operator

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

make install安装时的Libtool安装问题

我使用以下autotool步骤来安装我的pacakges:

./configure
make
make install prefix=/my/path
Run Code Online (Sandbox Code Playgroud)

但是我收到了以下libtool警告" libtool:警告:记得运行'libtool --finish/usr/local/lib '和" libtool:warning:'lib/my.la'尚未安装在'/ usr/local/lib' "使用autotool安装我的软件包.如果我更改为以下命令,问题就会消失:

./configure
make prefix=/my/path
make install prefix=/my/path
Run Code Online (Sandbox Code Playgroud)

看起来第一种方法不能prefix正确地替换为libtool.我该如何避免这个问题?

makefile libtool

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

避免递归进行安装

我正在使用构建项目autotool。基本上,该项目取决于几个由共同管理的第三方项目autotool

my_project/
my_project/3rd-party/
Run Code Online (Sandbox Code Playgroud)

为了启用递归构建,我AC_CONFIG_SUBDIRS在我的configure.ac中添加了宏:

AC_CONFIG_SUBDIRS([3rd-party/gtest-1.7.0])
AC_CONFIG_SUBDIRS([3rd-party/libstatgrab-0.91])
AC_CONFIG_SUBDIRS([3rd-party/leveldb-1.2.0])
Run Code Online (Sandbox Code Playgroud)

这给了我递归构建,链接和清理的便利。但是,当我点击时,我不想安装所有这些第三方库,而是我自己的项目make install。反正我有摆脱这种特殊的递归?

automake autotools configure

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

如何正确使用socket关闭fork?

我有关于如何正确关闭套接字文件描述符的问题.假设服务器在接受新连接时会分叉另一个过程.原始套接字文件描述符是sockfd和新的套接字文件描述符是new_sockfd.

sockfd = socket(...)
bind(...);
listen(...);

while(1) {
  new_sockfd = accept(...);
  if(fork() == 0) {
    // Child process
    dosomething(...);

  }
  else {

  }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,我们应该把close(sockfd)close(new_sockfd).我已经看到了网站的一些例子(http://www.tutorialspoint.com/unix_sockets/socket_quick_guide.htm "处理多个连接"),他们把close(sockfd)里面ifclose(new_sockfd)else块.但是,在fork之后,并不是两个并行运行的进程?如果父进程关闭new_sockfd,是否会影响子进程处理套接字?另外,如果子进程执行close(sockfd),这不会影响整个套接字程序吗?

c sockets fork

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

Spark/Scala:将RDD传递给函数

我很好奇究竟是什么将一个RDD传递给一个函数在Spark中.

def my_func(x : RDD[String]) : RDD[String] = {
  do_something_here
}
Run Code Online (Sandbox Code Playgroud)

假设我们定义了一个如上所述的函数.当我们调用该函数并传递一个现有的RDD [String]对象作为输入参数时,这个my_function是否为该RDD作为函数参数进行"复制"?换句话说,它是通过引用调用还是按值调用?

scala apache-spark rdd

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

使用SFINAE检测模板化成员函数的存在

我了解到SFINAE可用于确定成员函数是否存在于类中.例如,以下代码可用于检查方法hello是否存在于类中.

struct has_method_hello {

  using yes = char[1];
  using no  = char[2];

  template <typename U, typename C>
  static constexpr yes& test(decltype(&U::hello));

  template <typename>
  static constexpr no& test(...);

  static constexpr bool value = (sizeof(yes) == sizeof(test<T>(nullptr)));

}; 

struct Foo {
  void hello() {}
}

std::cout << has_method_hello <Foo> :: value << std::endl;  // 1
Run Code Online (Sandbox Code Playgroud)

但是,假设hello是模板化的,我该如何修改技巧以使它仍能正常运行?

struct Foo {
  template <typename T>
  void hello(T&) {...}
}
Run Code Online (Sandbox Code Playgroud)

c++ templates sfinae c++11

7
推荐指数
2
解决办法
626
查看次数

fopen 中的“e”标志是什么意思

我看到一个使用 的代码片段fopen(file_name, "r+e")。fopen 中的标志是什么e意思?我无法从 linux 手册页找到任何信息。

c linux fopen

7
推荐指数
2
解决办法
4115
查看次数

C++17 内联变量与内联静态变量

我对inline variableC++17的介绍有点困惑。inline variable和之间有什么区别inline static variable?这也会受到范围的影响吗?

inline T var_no_scope;
inline static T static_var_no_scope;

namespace scope {
  inline T var_scope;
  inline static T static_var_scope;
}
Run Code Online (Sandbox Code Playgroud)

任何解释将不胜感激!

c++ c++17

7
推荐指数
2
解决办法
3319
查看次数

Libtool安装警告:xxx.la尚未安装在/ user/local/lib中

当使用autoreconfautomakelibtool构建和安装我的申请,我总是警告" 的libtool:警告:xxx.la尚未安装在/用户/ local/lib目录 "和" libtool的:警告:请记住运行"的libtool --finish/usr/local/lib ".我已经尝试了很多方法,例如清理项目,并使用make clean重新配置,但仍然无法摆脱警告.这是我尝试过的:

./configure
make clean
make
make install prefix=~/Software/
Run Code Online (Sandbox Code Playgroud)

这里是我的一部分configure.ac,涉及到automakelibtool.

AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror])
LT_INIT([dlopen])
Run Code Online (Sandbox Code Playgroud)

为什么会发出这些警告,我该如何摆脱它们呢?

automake autotools libtool

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

c ++ 17内联+ thread_local vs thread_local

我想知道以下两个声明之间的区别是什么,如果两者都写在一个头文件中:

inline thread_local MyClass obj1;  // inline with thread_local
thread_local MyClass obj2;         // no inline
Run Code Online (Sandbox Code Playgroud)

如 C++17 中所述,向变量添加内联会强制所有翻译单元看到该变量的相同地址。这是否意味着可以obj2在不同的翻译单元中获得不同的地址值?在什么情况下要突出显示我们应该使用obj1而不是obj2

c++ inline thread-local-storage translation-unit c++17

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