(本示例中未使用#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) 使用最新的 vs 代码,在新安装上,只有 1 个插件(我知道这不会导致问题,因为我已经用另一个插件重复了整个事情;同样的问题)在 mac 上也使用最新的 catalina 操作系统。
问题:
从终端本身或从插件内向终端写入几页(2 或 3)页,终端变得难以忍受,向上或向下滚动将其完全冻结。
我发现一些以前的链接在谈论这个问题,但它们使用的是旧版本的 vs 代码,并且响应一直是“这现在已在 xxx 版本中修复”。
题:
vs代码中是否有一些常规设置可以防止这种情况?
还是您只需要等待下一次“更新”、下一次“中断”、下一次“更新”等?
function somefun()
x::Int = 1
x = 0.5
end
Run Code Online (Sandbox Code Playgroud)
编译时没有任何警告。当然,调用它会产生 InexactError:Int64(0.5)。问题:你能强制执行编译时检查吗?
我又花了 3 天时间试图让 xcode 11 与 c++20 模块一起工作。没运气。
我的机器上的 clang(最新版本的 xcode、clang、mac os)但是完全能够通过 makefile 处理模块。但是 IDE 支持似乎很糟糕,我无法让 xcode 识别和解析(同样编译)任何模块文件(无论我给它什么扩展名,我把它放在哪里,将它与它关联等等)。
一年前,我的头也撞到了墙上。
C++20 模块。我可以“今天”在 Xcode 11 中使用它们吗?
顺便说一句,我也没有运气对带有 clion 和 vscode 的模块的 IDE 支持......我感到惊讶的是,c++20 模块似乎需要很长时间才能获得支持,至少对于你自己编写的模块,而不是标准库等东西- 对我来说,这可以等待,因为它实施起来可能更复杂,并且与您自己的代码和项目的组织良好和“模块化”设计没有那么密切的关系......
无论如何,我的问题:
谢谢
编辑:只是为了证明我对这件事的痴迷,我只是读了 stroustrup a tour of c++ 2ed:(我的粗体)
标头和模块之间的差异不仅仅是句法上的。
- 一个模块只编译一次(而不是在使用它的每个翻译单元中)。
- 可以按任意顺序导入两个模块而不会改变它们的含义。
- 如果您将某些内容导入模块,则您的模块的用户不会隐式地访问(并且不会被)您导入的内容:导入不是可传递的。
对可维护性和编译时性能的影响可能是 惊人的。
我可以在 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 库的任何(简单)方法吗?
谢谢
问题:通过获取标准库函数的地址可能会出现格式错误的行为……请参见下面的示例。因此,我正在寻找一种替代标准库函数地址的方法。
根据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) 我正在与一个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 。
我需要使用I可能采用 3 个整数值 {-1, 0, 1} 之一的“指标”变量。
所以我宁愿不申报
int I;
反而
indicator_t I;
其中类型indicator_t~ {-1, 0, 1}
此外,如果我以后可以I在数值表达式中使用整数(不进行强制转换?),那就太好了。
题:
我应该如何定义类型indicator_t?
不久前我问了一个类似的问题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(),而不是在“解析时”。
题:
可以并且应该在初步的“解析时间”传递中发现这一点吗?
如果存在这样的“解析时间”选项,如何应用它?
否则,在运行之前检测和/或防止此类错误的推荐工作流程是什么,其中程序只有在已经浪费了很长时间执行后才会爆炸?
谢谢
c++ ×5
c++20 ×2
julia ×2
std ×2
xcode ×2
c++17 ×1
containers ×1
function ×1
list ×1
module ×1
overloading ×1
parsing ×1
pointers ×1
settings ×1
terminal ×1
typechecking ×1
unsafe ×1
xcode12 ×1
xcode12beta5 ×1