小编swa*_*log的帖子

C函数指针语法

我的问题非常简单.

通常,在声明某个变量时,将其类型放在它之前,如:

int a;
Run Code Online (Sandbox Code Playgroud)

函数指针的类型可能是:int(*)(int,int),以防我们指向一个带两个int的函数并返回一个int.但是,在声明这样的指针时,其标识符不在类型之后,如:

int(*)(int,int) mypointer;
Run Code Online (Sandbox Code Playgroud)

相反,你必须在中间写入标识符:

int(*mypointer)(int,int);
Run Code Online (Sandbox Code Playgroud)

为什么会这样?对不起,我知道这是一个令人费解的简单问题......

感谢大家的回复.如

c declare

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

Android NDK STL c ++ _ shared w/LIBCXX_FORCE_REBUILD导致std :: stringstream NOP

tl; dr:这个问题是为了解释为什么std::stringstream"失败",以及为什么它在链接到重建的c ++ _共享库时失败的方式(通过简单地什么都不做).

一个最小的例子:

std::stringstream ss;
ss << "Hello World";
__android_log_print(ANDROID_LOG_INFO,
                   "APP",
                   "Length: %i", ss.str().size());
Run Code Online (Sandbox Code Playgroud)

使用时编译项目

APP_STL := c++_shared
LIBCXX_FORCE_REBUILD := true
Run Code Online (Sandbox Code Playgroud)

输出是Length: 0.当使用APP_STL := c++_staticLIBCXX_FORCE_REBUILD := false,stringstream按预期工作时,Length: 11作为输出.

我正在使用STL的很多部分,到目前为止我看到的唯一明显的区别是这个沉默NOP stringstream.我还通过修改libgl2jniNDK示例测试了这一点,将Application.mk文件添加为:

NDK_TOOLCHAIN_VERSION := 4.8
APP_OPTIM := release
APP_STL := c++_shared
APP_ABI := armeabi-v7a #armeabi-v7a x86
APP_PLATFORM := android-19
LIBCXX_FORCE_REBUILD := true
Run Code Online (Sandbox Code Playgroud)

我已经测试了APP_OPTIM作为发布/调试的各种排列,APP_STL如c ++ _ shared/c ++ _ static,以及 …

c++ android stl android-ndk

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

使用Qt拖放:在悬停时了解目标应用程序 - 是否可能?

我目前正在探索从Qt应用程序拖放到未知目标应用程序的可能性.问题是Qt应用程序是否有可能接收即将接收丢弃的应用程序的信息(例如进程名称或标题).

一个(组成)示例可能是将绘图从Qt窗口拖动到文本编辑器或电子表格编辑器.在前者中,它将数据作为图像提供,后者作为数据点.

似乎Qt在悬停时有点意识到丢弃的基础目标是什么,因为在改变DropAction状态时会发出actionChanged信号.如果我没有弄错的话,似乎目标应用程序会查看拖动对象中包含的mime类型,并指示该操作将被放置在那里.我也没有从targetChanged信号中获取任何信息(据我所知,这是在当前的Qt应用程序中丢弃).

任何指针都会有所帮助,我很乐意跟进.

c++ qt drag-and-drop

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

C++对象池,它提供项目作为智能指针,在删除时返回到池

我正在玩c ++ - 想法,并且对这个问题有点困惑.

我想要一个LIFO管理资源池的类.当请求资源(通过acquire())时,它返回对象作为unique_ptr删除后的对象,导致资源返回到池中.

单元测试将是:

// Create the pool, that holds (for simplicity, int objects)
SharedPool<int> pool;
TS_ASSERT(pool.empty());

// Add an object to the pool, which is now, no longer empty
pool.add(std::unique_ptr<int>(new int(42)));
TS_ASSERT(!pool.empty());

// Pop this object within its own scope, causing the pool to be empty
{
  auto v = pool.acquire();
  TS_ASSERT_EQUALS(*v, 42);
  TS_ASSERT(pool.empty());
}

// Object should now have returned to the pool
TS_ASSERT(!pool.empty())
Run Code Online (Sandbox Code Playgroud)

基本实现,除了重要的最终测试外,将通过测试:

template <class T>
class SharedPool …
Run Code Online (Sandbox Code Playgroud)

c++ pool smart-pointers c++11

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

如何在QComboBox上设置不可选的默认文本?

使用常规QComboBox填充项目,如果currentIndex设置为-1,则窗口小部件为空.在组合框中显示初始描述性文本(例如" - 选择国家 - "," - 选择主题 - "等)将非常有用,这些文本未在下拉列表中显示.

我在文档中找不到任何内容,也没有任何先前的答案问题.

c++ qt qcombobox

15
推荐指数
2
解决办法
9062
查看次数

libgdx-android:拦截后退键并确认退出

使用libgdx,如何在实际执行命令退出游戏之前拦截android BACK键以进行一些预处理(例如要求用户确认)?

android libgdx

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

C++ 11 cmath函数不在android NDK w/gcc-4.8或clang 3.4的std命名空间中

在C++ 11之后,当包括头部时,cmath先前在全局命名空间中的各种函数被移动到std命名空间<cmath>.

然而,android NDK构建存在问题,包括gcc-4.8和clang-3.4工具链.

C++11标志被正确地指定,如其他C++ 11详情等unique_ptr工作正常.

如果我试图使用std::round,或者std::cbrt,编译器说这些在std::命名空间中不存在,他们应该[1].它们存在于全局命名空间中,但我不想使用它们.

这是一个已知的问题?我忽略了什么吗?有变通方法吗?

[1] http://en.cppreference.com/w/cpp/header/cmath


  • 使用gcc-4.8.1桌面版本没有这个问题,我最充分地使用gcc警告 -Wall -Wextra -Wcast-align -Wcast-qual -fpermissive -Wconversion -Wdisabled-optimization -Weffc++ -Wfloat-equal -Wformat=2 -Wimport -Winit-self -Winline -Winvalid-pch -Wlong-long -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wpointer-arith -Wredundant-decls -Wshadow -Wstack-protector -Wstrict-aliasing=2 -Wunreachable-code -Wunsafe-loop-optimizations -Wunused -Wvariadic-macros -Wwrite-strings -pedantic -pedantic-errors -Woverloaded-virtual -Wswitch-enum -Werror

  • 相关的构建命令,尽在其中: /opt/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ -MMD -MP -MF ./obj/local/armeabi/objs/main/__/android/jni/src/main.o.d -fpic -ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -march=armv5te -mtune=xscale -msoft-float -fno-exceptions -fno-rtti -mthumb -Os -g …

c++ android stl android-ndk c++11

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

订阅者可以在不关闭流的情况下处理 dart 流中抛出的异常吗?

我无法理解的简短示例:

Stream<int> getNumbersWithException() async* {
  for (var i = 0; i < 10; i++) {
    yield i;
    if (i == 3) throw Exception();
  }
}
Run Code Online (Sandbox Code Playgroud)

与用法:

getNumbersWithException()
    .handleError((x) => print('Exception caught for $x'))
    .listen((event) {
  print('Observed: $event');
});
Run Code Online (Sandbox Code Playgroud)

这将在 3 处停止并输出:

Observed: 0
Observed: 1
Observed: 2
Observed: 3
Exception caught for Exception: foo
Run Code Online (Sandbox Code Playgroud)

从文档(https://dart.dev/tutorials/language/streams)和(https://api.dart.dev/stable/2.9.1/dart-async/Stream/handleError.html)来看,这是这样的预期的,因为抛出的异常将自动关闭流。

  1. 这是否意味着处理流中的异常(以便订阅可以在此类事件中长期存在)的正确方法是处理流本身内部的异常?从外部无法做到这一点吗?
  2. 这对于广播流来说是一样的吗?
  3. 如果我以错误的方式思考这个问题,有哪些指示可以让我开始正确思考?

我目前认为流是异步数据事件的来源,有时可能是错误事件。从文档和示例来看,这一切看起来都很整洁,但我认为想要处理错误并继续观察数据流是一个正常的用例。我很难编写代码来做到这一点。但是,我可能会做错事。任何见解将不胜感激。


编辑:我可以补充一点,我尝试了各种方法,例如使用流转换器,结果相同:

var transformer = StreamTransformer<int, dynamic>.fromHandlers(
  handleData: (data, sink) => sink.add(data),
  handleError: (error, stackTrace, sink) => …
Run Code Online (Sandbox Code Playgroud)

stream reactive-programming dart

12
推荐指数
2
解决办法
6036
查看次数

为什么std :: seed_seq根据C++ 11是不可复制的,为什么gcc/clang不符合?

请考虑以下最小示例:

// main.cpp
#include <random>

int main(int, char **)
{
  std::seed_seq seed1{1337, 42};
  std::seed_seq seed2(seed1);
  std::seed_seq seed3 = seed2;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

根据C++标准,这不应该编译,因为std::seed_seq既不是可复制的,也不是可复制的.

然而,这个编译罚款既g++ 4.9clang 3.4

g++-4.9 -std=c++11 -Wall main.cpp
clang++ -std=c++11 -Wall main.cpp
Run Code Online (Sandbox Code Playgroud)

android ndk的llvm-libc++实现似乎遵循了"不可复制"的属性seed_seq.哪个可以在源头确认

 android-ndk-r10d/sources/cxx-stl/llvm-libc++/libcxx/include/random:3553
Run Code Online (Sandbox Code Playgroud)

或者通过编译最小的例子

 ${NDK_HOME}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ \
 -std=c++11 -c -Wall \
 -I${NDK_HOME}/sources/cxx-stl/llvm-libc++/libcxx/include \
 -I${NDK_HOME}/sources/cxx-stl/llvm-libc++/../llvm-libc++abi/libcxxabi/include \
 -I${NDK_HOME}/sources/cxx-stl/llvm-libc++/../../android/support/include \
 -isystem ${NDK_HOME}/platforms/android-18/arch-arm/usr/include \
 main.cpp
Run Code Online (Sandbox Code Playgroud)

我之前使用过这个(不知道我的不符合代码)来存储种子的副本以用于记录目的.*

我想知道:

  1. 为什么seed_seq不可复制?

  2. 这是我第一次遇到g++并且clang不符合标准.是否有意识地决定偏离标准,或者这是一个实现错误?这有多普遍?我想了解更多.


*我意识到我在想seed_seq错,如果我只对 …

c++ g++ libstdc++ c++11

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

为什么youtube.com的解析IP会直接发送到google.com?

这可能是一个非常愚蠢的问题,但我很好奇.

youtube.com的ping显示解析的IP为74.125.127.93.现在,如果您在浏览器http://74.125.127.93/中访问此IP,则可能会显示youtube页面.相反,搜索引擎出现了.

有人可以解释窗帘后面发生了什么吗?谢谢.

ip ping

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