7. 下列選項中, 可能會發⽣未定⾏為的是 ( )
(A) std::vector<int> vec(0, 1, 2, 3, 4, 5, 7);
(B) std::vector<int> vec(63, 42, std::allocator<int> {});
for(auto c : vec) {
vec.insert(vec.crbegin() + c, 42);
}
(C) template <typename T>
typename std::add_pointer<T>::type alloc() {
using rtype = typename std::add_pointer<T>::type;
return static_cast<rtype>(::operator new(sizeof T {}));
}
(D) delete this;
(E) template <typename T, typename U>
bool compare(const T &t, const U &) {
return t < u;
}
(F) int main() {
class Base {
~Base() {}
};
class Derived : Base {
~Derived() {}
};
Derived d;;
}
(G) 設 p 和 q 都是 int * 型別的指標, 且 p == q 成立. 先執⾏ new (p) int(1); 再
令 *q = 0;
8. 下列說法正確的是 ( )
(A) std::vector 與 std::string 多載的陣列注標運算⼦不可以⽤於添加新的元素.
(B) std::map 與 std::set 多載的陣列注標運算⼦可以⽤於添加新的元素.
(C) 函式可以回傳陣列型別.
(D) 設 arr 是 int [N] 型別的陣列, 其中 N 是⼀個整型的常數表達式. 對陣列 arr 使⽤
decltype 及 auto 進⾏推導, 得到的型別結果不相同.
(E) const_cast 運算⼦對頂層 const 無效.
(F) 可以使⽤ std::initializer_list 初始化 std::priority_queue.
(G) 不具名 union 存在成員丟失, 即不具名 union 宣告之後無法再使⽤其成員.