小编ㄈㄟㄈ*_*ㄟㄈㄟ的帖子

为什么直接使用条件运算符而不使用条件运算符进行分配时,该功能指针分配为何起作用?

(本示例中未使用#include,在带有g ++,选项-O0 -g3 -Wall -c -fmessage-length = 0的MacOS10.14,Eclipse IDE上编译)

假设此变量声明:

int (*fun)(int);
Run Code Online (Sandbox Code Playgroud)

无法使用“ std :: toupper和std :: tolower的无效重载”进行编译。

fun = (1 ? std::toupper : std::tolower);   // ERROR, invalid overload
Run Code Online (Sandbox Code Playgroud)

这样编译就可以了:

if (1) {
    fun = std::toupper;   // OK
}
else {
    fun = std::tolower;   // OK
}
Run Code Online (Sandbox Code Playgroud)

c++ pointers overloading function

28
推荐指数
2
解决办法
898
查看次数

vs 代码:令人难以置信的滞后终端(在 mac 上)

使用最新的 vs 代码,在新安装上,只有 1 个插件(我知道这不会导致问题,因为我已经用另一个插件重复了整个事情;同样的问题)在 mac 上也使用最新的 catalina 操作系统。

问题:

从终端本身或从插件内向终端写入几页(2 或 3)页,终端变得难以忍受,向上或向下滚动将其完全冻结。

我发现一些以前的链接在谈论这个问题,但它们使用的是旧版本的 vs 代码,并且响应一直是“这现在已在 xxx 版本中修复”。

题:

vs代码中是否有一些常规设置可以防止这种情况?

还是您只需要等待下一次“更新”、下一次“中断”、下一次“更新”等?

terminal settings visual-studio-code

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

julialang:可以(应该)在编译时捕获这种类型错误吗?

function somefun()
    x::Int = 1
    x = 0.5
end
Run Code Online (Sandbox Code Playgroud)

编译时没有任何警告。当然,调用它会产生 InexactError:Int64(0.5)。问题:你能强制执行编译时检查吗?

typechecking julia

5
推荐指数
1
解决办法
604
查看次数

xcode 中的 c++20 模块?也许是 xcode 12?

我又花了 3 天时间试图让 xcode 11 与 c++20 模块一起工作。没运气。

我的机器上的 clang(最新版本的 xcode、clang、mac os)但是完全能够通过 makefile 处理模块。但是 IDE 支持似乎很糟糕,我无法让 xcode 识别和解析(同样编译)任何模块文件(无论我给它什么扩展名,我把它放在哪里,将它与它关联等等)。

一年前,我的头也撞到了墙上。

C++20 模块。我可以“今天”在 Xcode 11 中使用它们吗?

c++20 模块(使用 Xcode 11 进行实验)

顺便说一句,我也没有运气对带有 clion 和 vscode 的模块的 IDE 支持......我感到惊讶的是,c++20 模块似乎需要很长时间才能获得支持,至少对于你自己编写的模块,而不是标准库等东西- 对我来说,这可以等待,因为它实施起来可能更复杂,并且与您自己的代码和项目的组织良好和“模块化”设计没有那么密切的关系......

无论如何,我的问题:

  1. 你能让模块在 xcode 11 或任何其他 IDE 中工作吗(即模块文件被自动识别编译、导出和导入)?
  2. xcode 12 会提供(更多)支持吗?

谢谢

编辑:只是为了证明我对这件事的痴迷,我只是读了 stroustrup a tour of c++ 2ed:(我的粗体)

标头和模块之间的差异不仅仅是句法上的。

  • 一个模块只编译一次(而不是在使用它的每个翻译单元中)。
  • 可以按任意顺序导入两个模块而不会改变它们的含义。
  • 如果您将某些内容导入模块,则您的模块的用户不会隐式地访问(并且不会被)您导入的内容:导入不是可传递的。

可维护性和编译时性能的影响可能是 惊人的

xcode module c++20

5
推荐指数
0
解决办法
1329
查看次数

对 xcode 12 的 c++20 库支持

我可以在 xcode 12 中使用 c++20 库吗?(xcode 12 beta 5,clang 版本 10.0.0)。

所以在 xcode 构建设置中,而不是

// in xcode build settings, "c++ standard library"
CLANG_CXX_LIBRARY = libc++
Run Code Online (Sandbox Code Playgroud)

也许使用类似的东西(不起作用 => clang err: invalid library name)

CLANG_CXX_LIBRARY = libc++20 // eg. libc++20 & libc++2a are invalid names
Run Code Online (Sandbox Code Playgroud)

我已经设置(通过提供 c++20语言支持工作,但不提供 c++20支持)

// in xcode build settings, "c++ language dialect"
CLANG_CXX_LANGUAGE_STANDARD = c++2a // ok but does not provide c++20 library
Run Code Online (Sandbox Code Playgroud)

我知道 c++20 库尚未完成/正式发布。

题:

您知道在 xcode 12 中使用(初步)c++20 库的任何(简单)方法吗?

谢谢

c++ xcode c++20 xcode12 xcode12beta5

5
推荐指数
1
解决办法
3397
查看次数

获取标准库函数地址的替代方法/可能是格式错误的行为

问题:通过获取标准库函数的地址可能会出现格式错误的行为……请参见下面的示例。因此,我正在寻找一种替代标准库函数地址的方法。

根据http://eel.is/c++draft/namespace.std#6和@Caleth 在Why function-pointer assignment work in direct assignment 但不在条件运算符中指出

“请注意,您通过获取标准库函数的地址(未指定可寻址)来依赖未指定(可能格式错误)的行为”

如本例所示:

int (*fun)(int) = std::toupper;
int t = fun('x');
Run Code Online (Sandbox Code Playgroud)

我的问题:

1) 有没有安全的方法通过指针调用(在本例中)toupper?

2) static_cast 是否使指向 std lib 函数的函数指针安全?喜欢:

int (*fun)(int) = static_cast<int(*)(int)>(std::toupper);
int t = fun('x');
Run Code Online (Sandbox Code Playgroud)

2)是否有另一种方法可以通过带有签名“int fun(int)”的单个函数来实现以下功能

bool choice = true;
int (*fun)(int);

if (choice) {
    fun = std::toupper;
}
else {
    fun = std::tolower;
}

int t = fun('x');
Run Code Online (Sandbox Code Playgroud)

c++ unsafe function-pointers std

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

C++ 列表与快速查找

我正在与一个std::list.

元素按“插入顺序”出现在列表中,而不是根据元素的值。

std::find()-ing 一个元素时,必须搜索整个列表。

为了加快从 O(n) 到 O(log(n)) 的“查找”速度,我可以自己实现一个哈希映射来存储元素std::list位置,或者我可以使用 boost 多索引,https://www.boost .org/doc/libs/release/libs/multi_index/doc/tutorial/basics.html#list_fast_lookup

问题:如今,使用 C++17,是否有一种标准/通用或最佳实践方法来实现具有列表所有属性以及快速find(例如 remove)的容器?或者说,这样的容器类型是否已经存在?也许是 C++20?

编辑/注意:列表中元素的顺序是相关的,因此不能直接使用 std::map 。

c++ containers list std c++17

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

c ++定义由一组固定整数组成的类型的最佳方法

我需要使用I可能采用 3 个整数值 {-1, 0, 1} 之一的“指标”变量。

所以我宁愿不申报 int I;

反而 indicator_t I;

其中类型indicator_t~ {-1, 0, 1}

此外,如果我以后可以I在数值表达式中使用整数(不进行强制转换?),那就太好了。

题:

我应该如何定义类型indicator_t

c++

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

julia:可以(应该)在“解析时”捕获这种类型的错误吗?

不久前我问了一个类似的问题julialang:可以(应该)在编译时捕获这种类型的错误吗?,我想提出一个相关的问题。

function somefun()
    for i = 1:10e10; sin(i); end # a time-consuming loop                  
    
    nonexist_fun() # call to a non existing function => error
end
Run Code Online (Sandbox Code Playgroud)

这里nonexist_fun()调用了一个不存在的函数并导致错误。不幸的是,错误仅在运行时被发现,在花费很长时间在内部执行一些先前的指令之后somefun(),而不是在“解析时”。

题:

可以并且应该在初步的“解析时间”传递中发现这一点吗?

如果存在这样的“解析时间”选项,如何应用它?

否则,在运行之前检测和/或防止此类错误的推荐工作流程是什么,其中程序只有在已经浪费了很长时间执行后才会爆炸?

谢谢

parsing julia

0
推荐指数
1
解决办法
87
查看次数