我只是遇到了一个非常奇怪的PHP代码:
$oink{'pig'} = 1;
var_dump($oink);
$oink{'pig'} = '123123';
echo $oink{'pig'}; /* => 123123 */
echo $oink['pig']; /* => 123123 */
Run Code Online (Sandbox Code Playgroud)
它就像一个数组,但在手册中没有提到.这是什么?
我是Backbone.js的新手.我已经完成了文档.我的问题是控制器概念在哪里出现?换句话说,Backbone.js中的控制器是什么?
我听说路由器是控制器.如果是这样,为什么它被视为控制器?我们可以开发没有路由器的简单基本应用程序吗?在那种情况下,控制器是什么?
对于指针的减法i和j同一数组对象的元素,[expr.add#5]中的注释读取:
[ 注意:如果值i-j不在类型的可表示值范围内
std?::?ptrdiff_t,则行为未定义.- 结束说明 ]
但是给出[support.types.layout#2],其中指出(强调我的):
- 该类型
ptrdiff_t是一个实现定义的有符号整数类型,它可以保存数组对象中两个下标的差异,如[expr.add]中所述.
结果是否可能i-j不在可表示的值的范围内ptrdiff_t?
PS:如果我的问题是由于我对英语的理解不足造成的,我道歉.
编辑:相关:为什么数组的最大大小"太大"?
给定void *一些存储,如何检查它是否指向正确对齐的存储而没有任何实现定义的行为?
我们当然有std::align,但是有更有效的方法吗?
template <std::size_t alignment>
inline bool is_aligned(void * ptr) noexcept {
std::size_t max = 1u;
return std::align(alignment, 1u, ptr, max);
}
Run Code Online (Sandbox Code Playgroud)
PS:我需要以兼容C++标准的方式执行此操作,而不依赖于任何特定于平台的(实现定义的)黑客攻击.
PPS:我为我(理解)英语而道歉,而不是我的母语.
EDIT(2018.08.24):从标题中删除了"有效",添加了更多的措辞,强调我不希望任何实现定义或特定于平台的行为.
比方说,我有一个类Derived从类派生Base而sizeof(Derived) > sizeof(Base).现在,如果分配一个这样的数组Derived:
Base * myArray = new Derived[42];
Run Code Online (Sandbox Code Playgroud)
然后尝试使用访问n-th对象
doSomethingWithBase(myArray[n]);
Run Code Online (Sandbox Code Playgroud)
然后,由于Base从无效位置访问,这可能(但不总是)导致未定义的行为.
这种编程错误的正确术语是什么?它应该被视为对象切片的情况吗?
你可以结合std::recursive_mutex使用std::condition_variable,意思是做这样的事情:
std::unique_lock<std::recursive_mutex> lock(some_recursive_mutex)
some_condition_var.wait(lock);
Run Code Online (Sandbox Code Playgroud)
如果不允许,为什么不呢?
我正在使用VC++ 11.
我想弄清楚这里发生了什么.我已经在这几个小时了,似乎无法控制为什么会发生这种情况.
我正在进行一些AJAX调用,并且我一直只在Mac OS X上的Firefox(版本21)中收到此错误.
这是错误:
"[Exception... "A parameter or an operation is not supported by the underlying object"
code: "15" nsresult: "0x8053000f (InvalidAccessError)" location:
"https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js Line: 6"
Run Code Online (Sandbox Code Playgroud)
我正在进行CORS调用,所以我设置了我的AJAX:
$.ajaxSetup({
crossDomain: true,
xhrFields: {
withCredentials: true
}
});
Run Code Online (Sandbox Code Playgroud)
并继续打电话.基本上,有没有人有这个错误的经验?我在网上看到一些帖子,但它们似乎都与跨域CSS有关,我没有使用它.
我正在测试用户定义的文字.我想让_fac返回数字的阶乘.
让它调用一个constexpr函数是有效的,但它不允许我用模板做,因为编译器抱怨参数不是也不可能constexpr.
我对此感到困惑 - 不是文字常量表达式吗?该5中5_fac始终是一个文字,可以在编译时计算,所以为什么我不能用它作为这样?
第一种方法:
constexpr int factorial_function(int x) {
return (x > 0) ? x * factorial_function(x - 1) : 1;
}
constexpr int operator "" _fac(unsigned long long x) {
return factorial_function(x); // this works
}
Run Code Online (Sandbox Code Playgroud)
第二种方法:
template <int N> struct factorial_template {
static const unsigned int value = N * factorial_template<N - 1>::value;
};
template <> struct factorial_template<0> {
static const unsigned int value = 1; …Run Code Online (Sandbox Code Playgroud) 在重构一些C++ 11代码时,我偶然发现了一件奇怪的事情.也就是说,似乎无法定义CV限定(const,volatile或const volatile)基类,例如:
struct A { int a = 0; };
struct B: A const {}; // Error here with Clang and GCC!
Run Code Online (Sandbox Code Playgroud)
但是,以下编译没有错误:
struct A { int a = 0; };
using AC = A const;
struct B: AC {}; // NO ERROR HERE!? Qualifiers are ignored.
int main() {
B b;
b.a = 42; // NO ERROR modifying a field of const base.
return b.a;
}
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
PS:由于这是一个language-lawyer问题,请提供C++标准的参考.
在C++ 11及更高版本中,如何确定抽象基类的构造函数是noexcept?以下方法不起作用:
#include <new>
#include <type_traits>
#include <utility>
struct Base { Base() noexcept; virtual int f() = 0; };
// static assertion fails, because !std::is_constructible<Base>::value:
static_assert(std::is_nothrow_constructible<Base>::value, "");
// static assertion fails, because !std::is_constructible<Base>::value:
static_assert(std::is_nothrow_default_constructible<Base>::value, "");
// invalid cast to abstract class type 'Base':
static_assert(noexcept(Base()), "");
// invalid new-expression of abstract class type 'Base'
static_assert(noexcept(new (std::declval<void *>()) Base()), "");
// cannot call constructor 'Base::Base' directly:
static_assert(noexcept(Base::Base()), "");
// invalid use of 'Base::Base':
static_assert(noexcept(std::declval<Base &>().Base()), "");
Run Code Online (Sandbox Code Playgroud)
一个简单的用途是:
int g() noexcept; …Run Code Online (Sandbox Code Playgroud) c++ ×7
c++11 ×5
arrays ×3
c++14 ×2
c++17 ×2
backbone.js ×1
braces ×1
constexpr ×1
cors ×1
firefox ×1
inheritance ×1
javascript ×1
jquery ×1
noexcept ×1
php ×1
ptrdiff-t ×1
std ×1
terminology ×1