- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下列哪个C++ lambda /语句应根据最新的C++规范工作?
与之相关的上下文:see here。
我在带有clang 11.0.0和gcc 10.2.1的Fedora 33上使用-std=c++17
测试了以下代码段。
更新:将__PRETTY_FUNCTION__
替换为__func__
以符合标准。可以观察到相同的行为。
Update2: Example使用const char * s = __func__
作为默认参数来验证它在功能范围内是否有效(由于@BenVoigt)。
1. lambda默认参数中的LLVM __func__
void clang() {
[](const char* c = __func__) {std::cout << c << std::endl;}();
}
预期的行为(CLANG):
clang\n
(void clang()
的__PRETTY_FUNCTION__
)warning: predefined identifier is only valid inside function [-Wpredefined-identifier-outside-function]
\n
(top level()
的__PRETTY_FUNCTION__
)template <typename L>
constexpr std::string_view methodName(L l) { return l(); }
#define __METHOD_NAME__ (\
__func__, /* needed for pointer to work */ \
methodName([](const char* c = __func__) {return std::string_view(c);}) \
)
void gcc1() {
std::cout << [](const char* c = __func__) { return c; }() << std::endl; // GCC: This statement doesn't do anything
std::cout << [](const char* c = __func__) { return c; }("gcc") << std::endl;
std::cout << __METHOD_NAME__ << std::endl; // GCC: This statement somehow conflicts with the statements above
}
void gcc2() {
std::cout << __METHOD_NAME__ << std::endl; // GCC: This statement itself works
}
预期输出(GCC):
gcc1
gcc
gcc1
gcc2
观察到的输出(GCC):
gcc
gcc2
void gcc3() {
std::string_view s = [](const char* c = __func__) { return std::string_view(c); }();
std::cout << s << std::endl;
}
预期行为(GCC):编译没有问题。
error: internal compiler error: in finish_expr_stmt
最佳答案
[class.local] The local class is in the scope of the enclosing scope, and has the same access to names outside the function as does the enclosing function. [Note: A declaration in a local class cannot odr-use (6.2) a local entity from an enclosing scope. — end note]
__func__
),而不能使用其捕获子句。
关于c++ - C++ lambda默认参数编译器是否行为不当?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64387023/
我正在编写一个 native iOS 7 应用程序,需要从 JSON api(由我控制)检索数据。 JSON 输出示例如下: { "id" : "544", "name" : "1900 Green
我是一名优秀的程序员,十分优秀!